Трюк №81. Как ускорить выполнение кода макроса и исключить мерцание монитора
Макросы чудесным образом упрощают автоматизацию повторяющихся задач в Excel, но способ их создания и применения иногда вызывает проблемы. К счастью, Excel — это достаточно гибкое приложение, позволяющее справиться с этими проблемами и создать новые возможности с минимальными усилиями.
Когда вы записываете макрос в Excel, создаваемый код часто заставляет экран мерцать, не только замедляя работу макроса, но и делая его неопрятным. К счастью, можно исключить мерцание экрана, одновременно ускорив выполнение макроса.
Один недостаток записанных макросов в Excel заключается в том, что созданный код зачастую является очень неэффективным. Это значит, что макрос, который должен выполняться за секунды, часто работает слишком долго и выглядит непривлекательно. Кроме того, когда вы создаете макрос в режиме записи, записываются все нажатые клавиши, нужны они были или нет. Это означает, что, если вы сделаете ошибку, а потом исправите ее, нажатые для этого клавиши также будут записаны в коде макроса. Подобными функциями обладает специальное программное обеспечение для создания веб-проектов. Достаточно купить битрикс и заказать услуги специалистов по настройке и вы получите все перечисленные функции. В битрикс существует также импорт файлов Excel.
Если вы уже работали с макросами и интересовались кодом VBA, то, вероятно, слышали о свойстве Application.ScreenUpdating. Присвоив ему значение Ложь (False) в начале выполнения макроса, вы не только прекратите постоянное мерцание экрана монитора, происходящее из-за того, что макрос был записан, а не запрограммирован в VBE, но и ускорите выполнение макроса. Причина, почему этот способ ускоряет работу макроса, заключается в том, что Excel более не нужно перерисовывать экран при выполнении таких команд, как Select, Activate, LargeScroll, SmallScroll и многих других.
Чтобы включить строку Application.ScreenUpdating = False
в начало существующего макроса, выберите команду Разработчикс → Макросы (Developer → Macros), выберите макрос, щелкните кнопку Изменить (Edit) и введите следующий код, показанный в листинге 7.1.
1 2 3 4 5 | // Листинг 7.1 Application.ScreenUpdating = False //Ваш код Application.ScreenUpdating = True End Sub |
Обратите внимание, что в конце кода вы заново включили обновление, присвоив свойству Application.ScreenUpdating значение Истина (True). Хотя Excel сделает это, когда фокус управления будет передан обратно Excel (другими словами, когда работа макроса завершится), лучше все же позаботиться о безопасности программы и включить этот код в конце макроса.
Иногда можно обнаружить, что свойству Application.ScreenUpdating присваивается значение Истина (True) еще до завершения записанного макроса. Это может произойти с записанными макросами, в которых часто используется команда Select. Если это произошло, нужно просто повторить строку Application.ScreenUpdating = False
в других фрагментах кода вашего макроса.