Комфорт и автоматизация

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

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

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