Ускоряем работу макросов
Если количество операций, которое требуется выполнить скрипту исчисляется сотнями тысяч или даже миллионами, то его выполнение может неприлично затянуться.
Ускорить работу макроса в сотни раз можно, отключив на время его действия различные функции 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 в любой момент.