Для большого количества преобразований в 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
Что в этой процедуре делается:
- Отключается обновление экрана при выполнении программы
- Отключается автоматическое вычисление формул
- Отключение событий
- Отключение отображение разрывов страниц
- Отключение строки статуса
- Отключение сообщений 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 и нажав "Выполнить". Либо, можно назначить этот макрос на какую-нибудь кнопку.
Комментарии к статье:
Добавить комментарий: