Иногда возникает необходимость автоматически запустить макрос при открытии или закрытии книги, при активации листа и т.д.
Давайте разберемся как это сделать.
В первую очередь рекомендуем ознакомиться с основными тезисами и принципами работы в редакторе VBA.
Для начала перейдем в редактор Visual Basic, для этого в панели вкладок выбираем «Разработчик» -> «Visual Basic» или нажимаем комбинацию клавиш Alt + F11.
В данной статье речь пойдет о макросах, действия которых выполняются при наступлении определенных условий в книге.
Поэтому мы будем работать с модулем «ЭтаКнига», который предназначен как раз для подобных целей.
В левой части окна редактора выбираем данный модуль:

Модуль «ЭтаКнига»
В правой части окна редактора в левом списке выбираем объект Workbook, в правом списке можно увидеть перечень обрабатываемых Excel событий для книги, такие как Open (открытие книги), BeforeClose (закрытие книги) и т.д.:
Ознакомимся с основными из них.
Запуск макроса при открытии книги
Workbook_Open — событие, происходящее при открытии книги.
Код макроса добавляется автоматически при выборе элемента в выпадающем списке:
1 2 3 |
Private Sub Workbook_Open() 'код макроса End Sub |
Запуск макроса при закрытии книги
Подобно макросу для открытии книги существует аналогичный и для закрытия.
Workbook_BeforeClose — событие, соответственно, происходящее при закрытии книги.
1 2 3 |
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'код макроса End Sub |
Другие основные обрабатываемые события для книги:
- Activate — событие, происходящее при активации книги (т.е. при переходе из другой активной книги в данную);
- Deactivate — событие, происходящее при переходе в другую книгу;
- SheetActivate — событие, происходящее при активации листа книги;
- SheetDeactivate — событие, происходящее при переходе на другой лист книги;
- SheetCalculate — событие, происходящее при пересчете формул на листе;
- BeforePrint — событие, происходящее при печати книги;
- BeforeSave — событие, происходящее при сохранении книги;
- NewSheet — событие, происходящее при создании нового листа книги.
Запуск макроса при открытии листа
Workbook_SheetActivate — событие, происходящее при открытии любого листа в книге.
1 2 3 |
Private Sub Workbook_SheetActivate(ByVal Sh As Object) 'код макроса End Sub |
При этом макрос будет работать при открытии любого листа в данной книге.
Если же необходимо обработать событие для какого-то конкретного листа книги, то нужно выбрать модуль с названием данного листа:

Модуль листа
В правой части окна редактора в левом списке выбираем объект Worksheet, в правом списке можно увидеть перечень обрабатываемых Excel событий для листа, например, Activate (активация листа), Calculate (пересчёт листа) и т.д.:
Worksheet_Activate — событие, происходящее при активации листа в книге.
1 2 3 |
Private Sub Worksheet_Activate() 'код макроса End Sub |
Другие основные обрабатываемые события для листа:
- Activate — событие, происходящее при активации листа;
- BeforeDoubleClick — событие, происходящее по двойному щелчку по любой ячейке листа;
- BeforeRightClick — событие, происходящее при нажатии правой кнопки мыши на любой ячейке листа;
- Calculate — событие, происходящее при пересчете формул на листе;
- Change — событие, происходящее при изменении значений ячеек на листе;
- Deactivate — событие, происходящее при переходе на другой лист книги;
- FollowHyperlink — событие, происходящее при переходе по гиперссылке на листе;
- SelectionChange — событие, происходящее при изменении адреса выделенной области.
Удачи вам и до скорых встреч на страницах блога Tutorexcel.ru!
А как настроить только на разовый запуск при первом открытии?
Куда нибудь что то надо записывать, при след. открытии код проверит тот запись
Используйте свойство CustomDocumentProperties для записи в декущий документ информации о его открытии. Например, так:
ThisWorkbook.CustomDocumentProperties(1) = ThisWorkbook.CustomDocumentProperties(1) + 1
Но сначала добавьте это свойство (1) к документу. Как это сделать:
ThisWorkbook.CustomDocumentProperties.Add «pass», 0, msoPropertyTypeNumber, 0