Макросы в Excel VBA Макросы Ускоряем работу макросов

Ускоряем работу макросов

Если количество операций, которое требуется выполнить скрипту исчисляется сотнями тысяч или даже миллионами, то его выполнение может неприлично затянуться.

Ускорить работу макроса в сотни раз можно, отключив на время его действия различные функции Excel:

'Ускоряем Excel путём отключения всего "тормозящего"
Public Sub AccelerateExcel()

 'Больше не обновляем страницы после каждого действия
 Application.ScreenUpdating = False

 'Расчёты переводим в ручной режим
 Application.Calculation = xlCalculationManual

 'Отключаем события
 Application.EnableEvents = False

 'Не отображаем границы ячеек
 If Workbooks.Count Then 
  ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False
 End If

 'Отключаем статусную строку
 Application.DisplayStatusBar = False

 'Отключаем сообщения Excel
 Application.DisplayAlerts = False

 End Sub

Разумеется, необходимо по окончании работы восстановить функциональность Excel, иначе пользоваться программой будет, мягко говоря, неудобно:

'Включаем всё то что выключили процедурой AccelerateExcel
Public Sub disAccelerateExcel()

 'Включаем обновление экрана после каждого события
 Application.ScreenUpdating = True

 'Расчёты формул - снова в автоматическом режиме
 Application.Calculation = xlCalculationAutomatic

 'Включаем события
 Application.EnableEvents = True

 'Показываем границы ячеек
 If Workbooks.Count Then 
  ActiveWorkbook.ActiveSheet.DisplayPageBreaks = True
 End If

 'Возвращаем статусную строку
 Application.DisplayStatusBar = True

 'Разрешаем сообшения Excel
 Application.DisplayAlerts = True

End Sub

Функции AccelerateExcel и disAccelerateExcel легли в основу надстройки Excelerate It!.

Нюанс

Бывает что макросы аварийно завершают работу. Если перед ними вызывалась процедура AccelerateExcel, то те изменения которые она внесла в программу Excel не будут отменены – потому что очередь до disAccelerateExcel просто не дойдёт.

Как в этом случае «починить» Excel?

Во-первых, можно запустить disAccelerateExcel из списка макросов.

Другой способ – назначить эту процедуру для события Open книги с макросами. Тогда работоспособность будет восстанавливаться автоматически при открытии книги.

И, наконец, лучше всего установить надстройку Excelerate It!, которая позволит применять AccelerateExcel и disAccelerateExcel в любой момент.