Это глава из книги Билла Джелена Гуру Excel расширяют горизонты: делайте невозможное с Microsoft Excel.
Задача: в предыдущей заметке мы рассмотрели создание обычного макроса, который располагается в модуле VBA. Вместе с тем существуют специальные макросы, называемые обработчиками событий, которые запускаются автоматически в ответ на событие, происходящее в Excel.
Рис. 1. Для доступа к коду объекта ThisWorkbook кликните на ней правой кнопкой мыши и выберите View Code
Скачать заметку в формате Word или pdf, примеры в формате Excel (с кодом VBA)
Справочная информация: вот некоторые из часто используемых обработчиков событий:
- Workbook_open – этот макрос запускается при открытии книги.
- Workbook_BeforeClose – этот макрос запускается после того, как кто-то пытается закрыть книгу, но прежде чем появляется окно с вопросом, нужно ли сохранить изменения.
- Workbook_BeforePrint – этот макрос запускается, когда кто-то выдает команду печати, но перед отправкой задания на принтер. Макрос позволяет добавить настройки в печатную форму, например, путь к файлу или имя пользователя в колонтитуле листа.
- Worksheet_change – этот удивительный макрос запускается каждый раз, когда пользователь вводит значение в любую ячейку листа.
- Worksheet_Activate – этот макрос подобен Workbook_open, но запускается при переходе на лист. Может быть, вы хотите, чтобы появлялись определенные пункты меню, когда кто-то переходит на конкретный лист.
- Worksheet_SelectionChange – этот макрос запускается каждый раз при переходе в новую ячейку на листе.
Обработчики события являются мощными инструментами, но они работают корректно, только если должным образом введены в редакторе VBA. Код VBA следует ввести не в традиционный модуль, а в область кода листа или книги Excel.
Решение: допустим, вы нашли какой-то код, который хотите выполнить для события BeforePrint. Это событие соответствует уровню книги, так что код нужно поместить в соответствующую область. Выполните следующие действия.
Откройте книгу Excel. Переключитесь в редактор VBA, нажав сочетание клавиш Alt+F11. Если окно проектов (VBAProject) отсутствует, выведете его на экран, нажав Ctrl+R. Найти книгу в списке проектов. Щелкните на знак + слева от имени книги, а затем на знак + слева от Microsoft Excel Objects и Modules. Это развернет представление книг и рабочих листов вплоть до имен листов и названия модулей. Вы также увидите строки ThisWorkbook (ЭтаКнига). Именно в этих объектах следует хранить код для событий уровня книги. Дважды щелкните на строку ThisWorkbook. Также можно кликнуть на ней правой кнопкой мыши и выбрать опцию View Code (рис. 1).
Если вы копируете макрос из Интернета, самое время вставить его в окно кода. Если вы набираете макрос, самостоятельно выполните следующие два шага (рис. 2):
- В верхней части окна кода из левого раскрывающегося списка выберите Workbook. По умолчанию Excel в окне кода выводит начало процедуры Workbook_Open. Вы можете удалить этот фрагмент кода позже.
- В правом раскрывающемся списке представлены все события уровня книги (в алфавитном порядке). Выберите BeforePrint. Теперь в окне кода заготовка процедуры начинается с Workbook_BeforePrint.
Рис. 2. Заготовка кода для объекта книга (Workbook) и события BeforePrint
Процесс аналогичен, если вы хотите создать код обработчика событий на уровне листа Excel. В этом случае в окне проектов, вы должны выбрать не ThisWorkbook, а какой-либо лист, например, Sheet3 (Cash Flow), дважды кликнуть на нем, и выбрать в качестве объекта Worksheet, а в качестве события, например, SelectionChange. Excel автоматически создает заготовку процедуры, начинающуюся с Worksheet_ SelectionChange.
Резюме: создание макроса обработчика событий начните с выбора объекта (книги или листа), а затем введите код не в модуль, а в соответствующий объект – ThisWorkbook или лист Excel.