| Главная » Статьи » Без категории |
Ускоряемся! Оптимизация кода и время работы макроса.
| Выключаем: Application.DisplayAlerts = False Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.EnableEvents = False 'отслеживание событий на листе ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False Application.DisplayStatusBar = False При необходимости используем: ActiveSheet.Calculate 'пересчитает активную страницу (формулы на ней) Application.Calculate 'пересчитает все открытые книги range.Calculate 'пересчет указанного диапазона и связей внутри указанного диапазона range.CalculateRowMajorOrder 'пересчет указанного диапазона слева-направо и сверху-вниз один раз Включаем в конце макроса: Application.DisplayAlerts = True Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True Application.DisplayStatusBar = True Алгоритмическая оптимизация: 1. Заменять работу с ячейками работой с массивами: Присвоили массив:
2. Менять Iff, switch, shoose на if...elsearr = Cells(1, 1).Resize(999, 10).Value провели вычисления и далее выгружаем массив на лист: Cells(1, 1).Resize(999, 10).Value = arr 3. При проверке на содержание данные использовать Len(str)=0 вместо str = "". 4. При сравнении ТЕКСТА применять StrComp(str1,str2) (3-й параметр vbTextCompare, если нужно с учетом регистра), а не "Петя" <> "Женя". 5. For ..Next вместо Do ... Loop. 6. Конкретней присваивать типы, не Variant, а Long или arr() as string, т.е. массив с данными, не Object, а Range или Worksheet. 7. For each obj in collection - работает быстрее чем for i=1 to lastrow ... next ' пишем Call Accelerator_Sub(True) - если надо ускорится, False - если вырубаем обратно Sub Accelerator_Sub(on_off As Boolean) Static Manual_calc As Integer If on_off = True Then ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False With Application .DisplayAlerts = False .ScreenUpdating = False .EnableEvents = False .DisplayStatusBar = False Manual_calc = Application.Calculation .Calculation = xlCalculationManual End With Else With Application .DisplayAlerts = True .ScreenUpdating = True .EnableEvents = True .DisplayStatusBar = True .Calculation = Manual_calc End With End If End Sub | |
| Просмотров: 531 | |
| Всего комментариев: 0 | |