Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 3)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
 
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1, Часть 2
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format (eng.)
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
    Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.
     
    Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
    Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

     
    Рекомендуется к прочтению:
  • Первые шаги с Excel VBA
  • Excel VBA: Приёмы программирования
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Daily Dose of Excel (eng.) - тематический блог: советы по работе с Excel и прочие материалы
  • Excel Macros & Excel VBA Code Tips, Tricks (eng.) - советы, трюки и уловки
  • Mr. Excel (forum) (eng.) - весьма оживленный форум по Excel&VBA.
  • Приемы, хитрости, трюки и нюансы работы в Microsoft Excel - сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
  • Microsoft Excel: Таблицы и VBA. Справочник. Вопросы и Ответы. Советы. Примеры.  
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2, часть 3
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов
    Найти "чужое" окно и нажать в нем кнопку (вписать текст в текстовое поле)
    Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно
    Как программно подключить дополнительные библиотеки (например, "Microsoft Scripting Runtime" или "Microsoft ActiveX Data Objects 2.8 Library) через References
     
    Перечень основных ColorIndex'ов из MSDN
     

    Смежные темы:
    Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
    Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
    Программы » Word FAQ | Excel FAQ | Access FAQ
    Прикладное программирование » Word VBA | Access VBA  
    Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
    Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
    Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
    Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:16 11-01-2010 | Исправлено: ALeXkRU, 16:42 03-08-2021
    ViktorGil



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Требуется помощь.
    Имеется книга с несколькими листами: Файл
    Нужен макрос, который бы проверял совпадение человека с листа1 в списке на листе2. Если человек найден, то добавить в определенную ячейку на листе2, а если не найден то выводить стоку на лист3.
    Т.е. должны проверяться несколько ячеек одновременно с первого листа со всем списком на втором листе (вроде бы примерно так).

    Всего записей: 101 | Зарегистр. 08-06-2009 | Отправлено: 16:42 28-10-2010
    TXP

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток.
    Имеется следующие:
    В книге на листе "Расчет" вводятся данные для расчета, на листе "Аннуитет" и листе "По сумме" находятся таблицы для расчета данных. Так же на листе "Расчет" находится элемент управления "Кнопка" который должен выполнить следующие действие, на листах "Аннуитет" и "По сумме":

    Код:
    Range("Q4").GoalSeek Goal:=0, ChangingCell:=Range("Q9")

    Подскажите как правильно прописать текст команды для "Кнопки", что бы  при нажатии "Кнопки" произошел пересчет данных на листах "Аннуитет" и "По сумме" в соответствии с выше указанным действием.
    Пытался делать так, но не работает.

    Код:
    Sheets("Аннуитет").Select
    Range("Q4").GoalSeek Goal:=0, ChangingCell:=Range("Q9")
     
    Sheets("По сумме").Select
    Range("Q4").GoalSeek Goal:=0, ChangingCell:=Range("Q5")

     
    И по возможности если не затруднит, пропишите команду для выбора конкретного листа и конкретного действия на нем, т.е. если в ячейке "А1" указано "2" то перейти на лист "Такойто1" и выполнить "Действие1", если указанно "3" то перейти на лист "Такойто2" и выполнить "Действие2"
    Постольку поскольку сам не в зуб ногой, ответ по возможности дайте более менее подробный.
    За ранее благодарен

    Всего записей: 22 | Зарегистр. 10-02-2009 | Отправлено: 09:10 29-10-2010 | Исправлено: TXP, 10:00 29-10-2010
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TXP
    выбор области с определенного листа
      Sheets("Аннуитет").Range(...

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 10:06 29-10-2010
    TXP

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    TXP  
    выбор области с определенного листа  
      Sheets("Аннуитет").Range(...  
     

     
    С этим разобрался, спасибо

    Всего записей: 22 | Зарегистр. 10-02-2009 | Отправлено: 10:54 29-10-2010 | Исправлено: TXP, 11:26 29-10-2010
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TXP

    Цитата:
    И по возможности если не затруднит, пропишите команду для выбора конкретного листа и конкретного действия на нем, т.е. если в ячейке "А1" указано "2" то перейти на лист "Такойто1" и выполнить "Действие1", если указанно "3" то перейти на лист "Такойто2" и выполнить "Действие2"  

     
    без перехода на лист
     
    с переходом на лист
     

    Цитата:
    Sheets("Аннуитет").Select
    Range("Q4").GoalSeek Goal:=0, ChangingCell:=Range("Q9")  

    это подбор значения для ячейки Q9, чтобы в Q4 стал 0, а что именно не работает?

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 12:03 29-10-2010
    TXP

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Бальшое спасибо, с тем что не работало я разобрался сам (я не указал лист для ячейки Q9).

    Всего записей: 22 | Зарегистр. 10-02-2009 | Отправлено: 12:36 29-10-2010
    StalkerI



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброго дня!
    Вопрос в следующем. К примеру, имеются такие данные: по ячейкам строки
     
    Фамилия 1, баллы за 1 контрольную, баллы за 2 контр., ... баллы за n контр.
    ....
    Фамилия n, баллы за 1 контрольную, баллы за 2 контр., ... баллы за n контр.
     
    Так вот, как можно вывести диалоговое окно пользователю с возможностью выбора из списка существующих в файле  фамилий. Выбираем фамилию, далее строится график по баллам каждой контрольной. Типа как график успеваемости своеобразный.  Ну с графиком разберусь, а вот как средствами VBA вывести запрос с использованием заданного списка, непонятно совсем. Подскажите, куда копать, если кто сталкивался или может есть код готовый.
    Заранее спасибо!

    Всего записей: 46 | Зарегистр. 07-12-2006 | Отправлено: 13:39 29-10-2010
    Drazhar

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    StalkerI
    Добавляете форму и на нее набрасываете Combobox и кнопку.
    На инициализацию формы ставите наполнение комбика из range(через listfillrange).
    А дальше уже разберетесь.

    Всего записей: 88 | Зарегистр. 10-11-2009 | Отправлено: 14:45 29-10-2010
    JekG

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Каким макросом можно найти в столбце пустые ячейки и скопировать в каждую из них содержание, предыдущей им заполненной ячейки? Да. Перебор нужно прекратить на предпоследней заплненной ячейке столбца. Иначе макрос забьет данными весь лист донизу

    Всего записей: 2695 | Зарегистр. 12-10-2005 | Отправлено: 12:17 30-10-2010 | Исправлено: JekG, 12:53 30-10-2010
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JekG
    Для решения Вашей задачи совсем не обязательно перебирать все ячейки и сравнивать их на пустоту. Достаточно, например, для столбца "A", выполнить следующий код:

    Код:
    Dim x As Range, y As Range: On Error Resume Next
    Set x = Range([A2], Cells(Rows.Count, 1).End(xlUp))
    Set y = x.SpecialCells(xlCellTypeBlanks)
    y = "=R[-1]C": x.Value = x.Value

    Здесь On Error Resume Next на случай, если не нашлось ни одной пустой ячейки в заданном диапазоне.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 09:01 31-10-2010 | Исправлено: SAS888, 09:03 31-10-2010
    DANYA198

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SAS888
     

    Цитата:
    Макрос пронормирует все записи в столбце "A" и добавит недостающие инициалы в том случае, если найдется такая же фамилия с полными инициалами. В столбце "B", напротив исправленной ячейки будет выведено исходное значение исправленной записи. Это и будет меткой для визуального контроля

     
    Здорово, только у меня табличка с большим количеством столбцов, в которых забиты данные по ФИО. Можно ли написать код так, чтобы он вначале выделял область А4:BS2200, и сортировал все эти данные по столбцу Е (в нём стоят ФИО). А исходное значение исправленной записи выводил в столбце не В, а BT?
     
    Добавлено:
    И я заметил, что во всех ФИО после И стоит пробел перед О, можно ли его убрать, чтобы между И и О была только точка без пробела?
     
    Добавлено:
    Ещё маленький нюанс: в Вашем примере есть такой Уткин Н. После выполнения макроса в столбцах А и В стоят одинаковые ФИО: "Уткин Н."  Т,е. до макроса был Уткин Н без точки после имени, после макроса - появилась точка. Как я понимаю, в столбце В должен появиться вариант до макроса, т.е. без точки? И смотря на разницу между столбцами А и В, я могу видеть - ага, вот что здесь испарвил макрос: добавил точку.  
     
    На данный момент получается, что если в стобцах А и В стоят одинковые ФИО, значит макрос ничего существенно в ФИО не изменял, а привёл ФИО в надлежащий вид: убрал лишние пробелы и поставил где нужно точки. Я правильно понимаю?
     
    Если правильно, то это даже лучше, т.к. можно пройтись по всему столбцу В, и через ИСТИНА отсоритровать такие моменты, в которых данные были не существенно изменены, и работать только с теми ФИО, в которые макрос привнёс существенные изменения.

    Всего записей: 21 | Зарегистр. 13-12-2006 | Отправлено: 14:05 31-10-2010 | Исправлено: DANYA198, 14:24 31-10-2010
    Lilu1

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста!
    Задача: В колонке названия организаций. В одной ячейке может быть несколько организаций. Нужно закрыть кавычку в названии организации, если ее нет.  
    Макрос идет по колонке и проверяет значение ячейки. Если кавычек нечетное количество, в конце значения ставит кавычку.
     
    Написала макрос, проверяю в пошаговом режиме - работает быстро, все считает! Запускаю RUN виснет весь Excel. Значений несколько тысяч, а он и 10 штук считает около получаса.
     
    Почему это происходит? Как это исправить?

    Всего записей: 3 | Зарегистр. 01-11-2010 | Отправлено: 16:27 01-11-2010
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lilu1

    Цитата:
    Почему это происходит? Как это исправить?

    а где текст макроса в котором это происходит?

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 18:54 01-11-2010
    ViktorGil



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Требуется помощь.
    Имеется книга с несколькими листами: Файл
    Нужен макрос, который бы проверял совпадение человека с листа1 в списке на листе2. Если человек найден, то добавить в определенную ячейку на листе2, а если не найден то выводить стоку на лист3.
    Т.е. должны проверяться несколько ячеек одновременно с первого листа со всем списком на втором листе (вроде бы примерно так).

    Всего записей: 101 | Зарегистр. 08-06-2009 | Отправлено: 08:39 02-11-2010
    Lilu1

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sub Макрос2()
    '
    ' Макрос2 Макрос
    ' Макрос записан 29.10.2010 (ACER-BOOK)
    '
    Dim st, st1 As String
    Dim n, n1 As Integer
    Dim wbk As Workbook
     Set wbk = Application.ActiveWorkbook
     st = """"
     For i = 10 To 20  'надо 5 000- диапазон сравнения
     n = 0
     st1 = wbk.Sheets("лист2").Cells(i, 2)
     n1 = InStr(1, st1, st, 1)
     If n1 <> 0 Then
     While n1 <> 0
     n = n + 1
     n1 = InStr(n1 + 1, st1, st, 1)
     Wend
     End If
     wbk.Sheets("лист2").Cells(i, 27) = n
     If n <> 0 And n Mod 2 <> 0 Then
     st1 = st1 + st
     wbk.Sheets("лист2").Cells(i, 2) = st1
     End If
     Next i
     
    End Sub

    Всего записей: 3 | Зарегистр. 01-11-2010 | Отправлено: 11:42 02-11-2010
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lilu1
    Тормозит из-за "прямой" работы с ячейками, попробуйте так
    Подробнее...

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 06:22 03-11-2010
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lilu1
    Ваш макрос можно существенно рационализировать. Посмотрите пример. Обратите внимание на время выполнения.

    Код:
    Sub Main()
        Dim i As Long, s As String, x As Range: Application.ScreenUpdating = False
        Set x = Range([B10], Cells(Rows.Count, 2).End(xlUp)): a = x.Value
        For i = 1 To UBound(a, 1)
            s = Replace(a(i, 1), Chr(34), "")
            If (Len(a(i, 1)) - Len(s)) Mod 2 <> 0 Then a(i, 1) = a(i, 1) & Chr(34)
        Next: x.Value = a
    End Sub

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 06:40 03-11-2010
    JekG

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SAS888
    Давно замечаю ваш талант в VBA на этом да и на других форумах. В связи с этим не будет ли наглостью попросить вас глянуть уже готовый и работающий макрос на предмет его рационализации? При согласии макрос вышлю в ПМ.

    Всего записей: 2695 | Зарегистр. 12-10-2005 | Отправлено: 10:06 03-11-2010
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JekG  Ответ см. в личных сообщениях.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 10:41 03-11-2010
    rikamid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток всем!
    Шапку прочитал, и понимаю, что подобного рода вопросы здесь не приветствуются, но все же спрошу, поскольку данная задача для меня разовая, и изучать VBA для ее решения не имею ни возможности ни времени (все равно, что изучит суахили ради одного часа пролетом в Африке, не целесообразно, мне кажется)
    Суть следующая, имеется макрос, цель которого извлечь картинку из примечания к ячейке и сохранить ее в jpg файл, с чем он и справляется прекрасно в Exel 2003, и наотрез отказывается в Exel 2007, не могли бы уважаемые специалисты данного топика помочь адаптировать его под Exel 2007, буду премного благодарен.

    Всего записей: 236 | Зарегистр. 01-07-2007 | Отправлено: 19:41 04-11-2010 | Исправлено: rikamid, 19:44 04-11-2010
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 3)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru