Delphi вики
Advertisement

Информация взята отсюда. Для ускорения выполнения макросов следует:

  • Очистить код от Activate и Select;
  • Отключить следующие функции:
  1. Application.Calculation = xlCalculationManual - автоматический пересчет формул;
  2. Application.ScreenUpdating = False - обновление экрана;
  3. Application.EnableEvents = False - отслеживание событий;
  4. ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False - разбиение на печатные страницы.

Отключение функций:

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False

Включение функций:

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
ActiveWorkbook.ActiveSheet.DisplayPageBreaks = True
  • Последнюю ячейку желательно искать так:
lLastRow = Cells(Rows.Count,1).End(xlUp).Row
  • Если используете быстрый ЕСЛИ - IIF, то замените его на IF ... Then ... Else
  • Вместо Switch() и Shoose() лучше применить тот же IF ... Then ... Else
  • Пустую строку лучше искать: Len(s)=0 вместо s = ""
  • Не применять сравнение текстовых величин напрямую. Лучше применить встроенную функцию StrComp:
If s <> s1 Then будет медленнее, чем
If StrComp(s, s1, vbBinaryCompare) = 0
и тем более, если при сравнении необходимо не учитывать регистр:
If LCase(s) <> LCase(s1) Then будет медленнее, чем
If StrComp(s, s1, vbTextCompare) = 0
  • Циклы For … Next в большинстве случаев работает быстрее, чем цикл Do ... Lоор
  • Избегать присвоения переменным типа Variant и Object.
  • Если работаете с массивами, то можно при объявлении указать это явно: Dim arr() вместо Dim arr

Обработка ошибок:[]

Идти дальше

On Error Resume Next

перейти к метке

Function ...
  On Error GoTo ErrorHandler
  ...
  Exit Function
​​​ErrorHandler:
  ...
End Function

Как предусмотреть выход из бесконечного цикла:[]

Вобщем DoEvents запихай в тело цикла и тама
If OutMode then Exit For
Но! В области объявлений Dim OutModa as boolean
И Перед циклом лучше бы OutMode = false
А по нажатию кнопки OutMode = true

Отображение прогресса:[]

Application.StatusBar = "Мой текст"
Application.StatusBar = False

обязательно вконце функции присвоить False, иначе текст будет отображаться до перезагрузки Excel

Advertisement