Публикации
Публикации  »  VBA, Excel

Как ускорить выполнение VBA

Для большого количества преобразований в Excel-ких таблицах очень актуальным становится скорость выполнения макроса. Кроме оптимизации кода, я так же нашел для себя способ, как значительно ускорить выполнение кода на VBA. Для этого можно использовать 2 процедуры. Одна отключает "лишние" функции, замедляющие Excel, а вторая обратно всё включает, когда все готово.

Ускорение кода на VBA путем выключения ненужных функций

Public Sub AccelerateBegin()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
End Sub

Что в этой процедуре делается:

  1. Отключается обновление экрана при выполнении программы
  2. Отключается автоматическое вычисление формул
  3. Отключение событий
  4. Отключение отображение разрывов страниц
  5. Отключение строки статуса
  6. Отключение сообщений Excel-я

Включение функций, когда все необходимые действия выполнены

Public Sub AccelerateEnd()
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.DisplayStatusBar = True
Application.DisplayAlerts = True
End Sub

Теперь, если есть долго выполняющийся код, можно сделать так:

AccelerateBegin
' какие-то действия с таблицами, занимающие много времени
AccelerateEnd

Обратите внимание: нужно иметь в виду, что если в коде между AccelerateBegin и AccelerateEnd произойдет ошибка, все отключенные функции Excel-я так и останутся отключенными, т.к. выполнение кода не дойдет до AccelerateEnd. В случае, если такое произошло, тогда чтобы всё восстановить, можно выполнить AccelerateEnd отдельно от остального, поставив курсор в текст этой процедуры в редакторе VBA и нажав "Выполнить". Либо, можно назначить этот макрос на какую-нибудь кнопку.

Категория: VBA, Excel

Комментарии к статье:

Пока комментариев нет, ваш будет первым ;)

Добавить комментарий: