Перейти к содержимому
15 000 бонусов на бронирование отелей!
(Реклама. АО "СУТОЧНО". ИНН 7300037501)

VBA Excel. Свойство Application.EnableEvents

    Свойство Application.EnableEvents в VBA Excel. Управление механизмом обработки событий. Примеры использования свойства Application.EnableEvents.

    Свойство Application.EnableEvents

    Свойство Application.EnableEvents – это инструмент управления реакцией Excel на события. Оно позволяет временно отключать или включать обработчики событий, связанные с листами, книгами, диаграммами и самой программой.

    События в VBA Excel

    События — это действия пользователя или системы, на которые Excel может реагировать автоматически, выполняя заранее написанный код. Например:

    • Worksheet_Change — срабатывает при изменении содержимого ячейки.
    • Workbook_Open — срабатывает при открытии книги.
    • BeforeSave — срабатывает перед сохранением книги.

    Обычно эти обработчики полезны, но иногда они мешают: ваш собственный код может изменять ячейки, и каждое такое изменение запускает событие Worksheet_Change, которое может выполнять ненужные действия, входить в бесконечный цикл или сильно замедлять работу.

    По умолчанию Application.EnableEvents = True, то есть Excel автоматически реагирует на все события и запускает соответствующие макросы.

    Синтаксис свойства

    Значения свойства:

    • True (по умолчанию) — cобытия включены → все обработчики событий выполняются.
    • False — cобытия отключены → Excel не будет вызывать ни один обработчик события, даже если условия для него выполняются.

    Зачем отключать события

    Основная цель использования свойства Application.EnableEvents = False (режим отключения событий) — избежать зацикливания и повысить производительность при выполнении кода.

    Важно: отключение событий действует глобально на всё приложение Excel, а не только на текущую книгу. Поэтому после отключения событий обязательно включите их обратно.

    Если вы забудете вернуть значение свойства в True, события перестанут работать во всём Excel.

    То же самое может произойти при аварийном завершении программы из-за ошибки. Всегда используйте обработчик ошибок On Error GoTo, чтобы гарантировать включение событий даже при сбое.

    Примеры с Application.EnableEvents

    Предотвращение рекурсии

    Допустим, у вас есть обработчик события изменения ячейки:

    Событие должно при изменении любой ячейки в диапазоне A2:K30 копировать её значение в ячейку A1.

    Проблема: изменение A1 внутри обработчика снова вызывает Worksheet_Change → возникает бесконечный цикл. У меня, при проведении тестов, Excel самопроизвольно закрывался.

    Решение с помощью свойства Application.EnableEvents:

    Для похожей цели свойство Application.EnableEvents используется в коде суммирования чисел в одной ячейке, где оно предотвращает повторный вызов события Worksheet_Change.

    Предотвращение нежелательных диалогов

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

    Ускорение массовых операций

    Ускорение макроса вместе с другими способами оптимизации:

    Краткие выводы

    Зависимость свойства от значения

    Зависимость свойства Application.EnableEvents от его значения:

    Свойство Значение Эффект
    EnableEvents True События работают
    EnableEvents False События отключены

    Когда использовать свойство

    Используйте Application.EnableEvents = False, когда:

    • Изменяете ячейки внутри обработчиков событий.
    • Выполняете массовые изменения данных.
    • Запускаете макросы, которые могут триггерить (вызывать) события.

    Когда не стоит использовать

    • Если ваш код не взаимодействует с событиями.
    • Если вы не можете проконтролировать возврат значения Application.EnableEvents в True.

    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.