Перейти к содержимому

Создание макроса обработчика событий

Это глава из книги Билла Джелена Гуру Excel расширяют горизонты: делайте невозможное с Microsoft Excel.

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

Рис. 1. Для доступа к коду объекта ThisWorkbook кликните на ней правой кнопкой мыши и выберите View Code

Рис. 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

Рис. 2. Заготовка кода для объекта книга (Workbook) и события BeforePrint

Процесс аналогичен, если вы хотите создать код обработчика событий на уровне листа Excel. В этом случае в окне проектов, вы должны выбрать не ThisWorkbook, а какой-либо лист, например, Sheet3 (Cash Flow), дважды кликнуть на нем, и выбрать в качестве объекта Worksheet, а в качестве события, например, SelectionChange. Excel автоматически создает заготовку процедуры, начинающуюся с Worksheet_ SelectionChange.

Резюме: создание макроса обработчика событий начните с выбора объекта (книги или листа), а затем введите код не в модуль, а в соответствующий объект – ThisWorkbook или лист Excel.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *