Найти в Дзене
Макрос решает

Пять событий, которые изменят вашу книгу Excel: от двойного щелчка до удаления листов

Иногда Excel кажется волшебной тетрадью: ты только коснулся клавиши — и что-то изменилось. Но настоящая магия начинается, когда вы начинаете ловить события книги. Сегодня мы научимся создавать макросы, которые реагируют не на один лист, а на всю рабочую книгу. Будем перехватывать удаление листов, двойные и правые щелчки, пересчёт формул и изменения в ячейках. Да-да, всё это — на уровне всей книги. Берём курс на максимальную практичность, без лишней болтовни и с полным уважением к тем, кто хочет, чтобы Excel работал как часы. С него начнём. Каждый раз, когда пользователь пытается удалить лист — срабатывает это событие. Вот простой пример. Создадим обработчик в модуле ThisWorkbook: Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
│ * MsgBox "Удаляется лист: " & Sh.Name*
End Sub Теперь, если кто-то удалит лист — Excel сразу подаст голос. Очень полезно, если вы хотите обезопаситься от случайного удаления данных. Это событие ловит двойной щелчок по любой ячейке на любом листе
Оглавление

Иногда Excel кажется волшебной тетрадью: ты только коснулся клавиши — и что-то изменилось. Но настоящая магия начинается, когда вы начинаете ловить события книги. Сегодня мы научимся создавать макросы, которые реагируют не на один лист, а на всю рабочую книгу. Будем перехватывать удаление листов, двойные и правые щелчки, пересчёт формул и изменения в ячейках. Да-да, всё это — на уровне всей книги.

Берём курс на максимальную практичность, без лишней болтовни и с полным уважением к тем, кто хочет, чтобы Excel работал как часы.

1. Событие Workbook_SheetBeforeDelete

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

Вот простой пример. Создадим обработчик в модуле ThisWorkbook:

Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)

│ * MsgBox "Удаляется лист: " & Sh.Name*

End Sub

Теперь, если кто-то удалит лист — Excel сразу подаст голос. Очень полезно, если вы хотите обезопаситься от случайного удаления данных.

2. Событие Workbook_SheetBeforeDoubleClick

Это событие ловит двойной щелчок по любой ячейке на любом листе. Мы можем запретить стандартное поведение (например, переход в режим редактирования), а можем — что-нибудь вывести.

Вот пример, при котором мы реагируем только на двойной клик по ячейке A2:

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

│ * If Target.Address = "$A$2" Then*

│ * MsgBox "Вы щёлкнули по ячейке A2 на листе: " & Sh.Name*

│ * Cancel = True*

│ * End If*

End Sub

Теперь где бы вы ни сделали двойной щелчок по A2 — Excel отреагирует, а стандартное редактирование будет заблокировано.

📌 Подпишитесь на канал, если хотите больше таких простых, но мощных трюков в Excel. И напишите в комментариях — какие события вы хотели бы разобрать подробнее?

3. Событие Workbook_SheetBeforeRightClick

Это — родной брат предыдущего. Только теперь реагируем на правый щелчок мыши.

Если пользователь кликнет правой кнопкой по ячейке A2 — выведем сообщение, а контекстное меню отключим:

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

│ * If Target.Address = "$A$2" Then*

│ * MsgBox "Вы правой кнопкой кликнули по ячейке A2 на листе: " & Sh.Name*

│ * Cancel = True*

│ * End If*

End Sub

Это особенно удобно, если вы хотите, чтобы контекстное меню появлялось только в нужных ячейках, а в других — скрывалось. Примитивная защита от "любопытных ручек".

4. Событие Workbook_SheetCalculate

Это событие срабатывает каждый раз, когда Excel пересчитывает формулы. Оно может быть как другом, так и врагом — если вы будете запускать тяжёлые макросы при каждом пересчёте.

Тем не менее, полезно иногда отследить, когда происходит перерасчёт:

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

│ * MsgBox "Произошёл пересчёт на листе: " & Sh.Name*

End Sub

Вставьте простую формулу =1+1 в любую ячейку, измените любую её часть и нажмите Enter — увидите сообщение. Это отличный способ отследить, когда запускаются зависимости между листами.

5. Событие Workbook_SheetChange

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

Вот как вы можете его использовать:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

│ * MsgBox "Вы изменили ячейку: " & Target.Address & " на листе " & Sh.Name*

End Sub

Этот обработчик поможет, если вы хотите отслеживать внесение данных, вести логи, реагировать на ключевые изменения (например, если кто-то вписывает "Готово" в колонку статусов).

Что дальше?

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

🔥 Если вы хотите продолжения серии по событиям — обязательно подпишитесь на канал и напишите в комментарии, какие события вам интересны. Или, может быть, хотите разобрать, как отслеживать создание листов, открытие книги или печать?

Практические советы

  1. Все события книги прописываются в модуле ThisWorkbook. Не в обычном модуле, не в модуле листа.
  2. Не запускайте тяжёлые процедуры в SheetCalculate или SheetChange — они срабатывают часто.
  3. Проверяйте Target.Address — чтобы макрос не срабатывал на каждое касание.

Заключение

Работа с событиями в Excel — это как электропроводка: не видно, но всё держится на ней. Настроив поведение книги под себя, вы превращаете скучную таблицу в интерактивное приложение, с подсказками, проверками и защитами.

📌 Если статья оказалась полезной — подпишитесь и расскажите, какой из обработчиков вы будете использовать в своей работе? Может, тот, который блокирует правый клик? Или отслеживание удаления листов?

А пока в Telegram-канале "Макрос" можно скачать чек-лист по 5 ключевым событиям VBA. Переходите и пользуйтесь.

Макрос