Щоразу, коли ви оновлюєте значення клітинки, Excel проходить процес перерахунку книги. Під час роботи безпосередньо в Excel ви хочете, щоб це відбувалося 99,9% часу (виняток становить, якщо ви працюєте з надзвичайно великою книгою). Однак це дійсно може уповільнити ваш код VBA. Добре розпочати розрахунки вручну на початку макросів і відновити обчислення в кінці макросів. Якщо вам потрібно перерахувати книгу, ви можете вручну попросити Excel обчислити.
Вимкніть автоматичні розрахунки
Ви можете вимкнути автоматичний розрахунок за допомогою макросу, встановивши для нього значення xlmanual. Використовуйте наступний фрагмент коду VBA:
1 | Application.Calculation = xlManual |
Знову ввімкніть автоматичні розрахунки
Щоб знову увімкнути автоматичний розрахунок із налаштуванням xlAutomatic:
1 | Розрахунок = xlАвтоматичний |
Я рекомендую вимкнути автоматичні обчислення на самому початку вашої процедури та знову ввімкнути автоматичні обчислення в кінці. Це буде виглядати так:
Вимкніть приклад макросу автоматичних розрахунків
12345678 | Sub Auto_Calcs_Example ()Application.Calculation = xlManual'Робити щосьРозрахунок = xlАвтоматичнийEnd Sub |
Розрахунок вручну
Якщо автоматичні обчислення вимкнено, можна скористатися Обчисліть команда, щоб змусити Excel перерахувати:
1 | Обчисліть |
Ви також можете наказати Excel перерахувати лише окремий аркуш:
1 | Робочі аркуші ("аркуш1"). Обчисліть |
Ви також можете наказати VBA перерахувати лише діапазон (натисніть, щоб прочитати нашу статтю про методи розрахунку VBA)
Ось як це може виглядати всередині макросу:
12345678910111213 | Sub Auto_Calcs_Example_Manual_Calc ()Application.Calculation = xlManual'Робити щось'ПерерахуйтеОбчисліть«Робіть більше справРозрахунок = xlАвтоматичнийEnd Sub |
Налаштування VBA - код прискорення
Якщо ваша мета - прискорити код, слід також змінити інші налаштування:
Вимкнення оновлення екрана може мати величезну різницю в швидкості:
1 | Application.ScreenUpdating = Неправда |
Вимкнення рядка стану також матиме невелику різницю:
1 | Application.DisplayStatusBar = Неправда |
Якщо у вашій книзі є події, ви також повинні вимкнути події на початку процедур (для прискорення коду та запобігання нескінченним циклам!):
1 | Application.EnableEvents = Неправда |
Нарешті, ваш код VBA може бути уповільнений, коли Excel намагається повторно обчислити розриви сторінок (Примітка: це не вплине на всі процедури). Щоб вимкнути DisplayPageBreaks, використовуйте цей рядок коду:
1 | ActiveSheet.DisplayPageBreaks = Неправда |