Увеличить быстродейстие при изменении формата ячеек в VBA

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
SunKiSSka
Сообщения: 68
Зарегистрирован: 11 июл 2007, 12:58
Откуда: Санкт-Петербург

с наступающим ВСЕХ!!!


Подскажите, пож-та, просто приспичило )))
Задача следующая: Диапазон "А7:G22". В ячейки А7:А22 вставляется список, причем значения могут занимать все ячейки в диапазоне А7:А22, а может быть любое количество заполненных ячеек. Далее необходимо объединить в каждой строке ячейки А(n):G(n) если в ячейках А7:A22 находится текст (например, объединить А7:G7, А8:G8, A9:G9). И, соответственно, в каждом уже объединенном диапазоне установить высоту строки, например, RowHeight = 25. Пустые же строки не трогать (не объединять и не менять высоту строки). Но здесь то у меня все и начинается:

весь описанный процесс выполняется медленно, наблюдаем как бегает по диапазонам, объединяет их, меняет высоту строки. Да еще и 8 раз пробегает по всему диапазону "А7:G22" от начала до конца. При этом данные и формат строк реально меняются только в первый раз .

кроме того, в диапазонах, для которых ячейка А(n) пустая, также происходлит объединение (A10:G10, например, но в A10 нет текста). Конечно это не смертельно, но все-таки замедляет работу.

Пож-та, если есть у кого светлые мысли в голове подскажите ))))
Премного Благодарна ))))
pilligrim
Сообщения: 43
Зарегистрирован: 20 июл 2007, 07:57
Откуда: UZ
Контактная информация:

Если вы видете как выделяеются ячейки, то скорее всего в вышем макросе используются метод .Select и диапозон Selection. Старайтесь ими не пользовать, т.е обращайтесь на прямую на сам диапозон прим. Range("A7:A22").Merge
Также следующие команды помогут вам ускорить работу макросов.
Application.ScreenUpdating = False ' довьте в начале форматирования, не забудьте присвоить значение True в конце скрипта.
Application.EnableEvents =False довьте в начале форматирования, ВАЖНО!!! не забудьте присвоить значение True в конце скрипта.
Application.Calculation=xlCalculationManual для отключения автоматического вычисления. В конце макроса присвоить значение Application.Calculation=xlCalculationAutomatic
Ответить