Обработчиками событий служат процедуры, которые запускаются в момент выполнения некоторых действий пользователем: нажатия на кнопку, выборе другого элемента из списка, выбор другой ячейки и подобное. Таким образом пользователь может взаимодействовать с приложением и получить результат.
Обработчики для элементов Form Controls:
Присоединить к элементу Form Controls можно 1 обработчик, это будет макрос и найти его можно в окне макросов. Несколько шагов назначения обработчика:
- Создаём новый элемент Form Controls.
- При создании кнопки сразу открывается окно назначения макроса, для других элементов нужно на нём нажать правой кнопкой мыши и выбрать пункт "Assign Macro...".
- Если нужный макрос уже существует, выбираем его из списка и нажимаем "OK" для завершения. В другом случае нажимаем "New" для ручного создания макроса или "Record" для автоматической записи макроса.
- Пишем код макроса или записываем действия автоматически, нажимаем "OK". Теперь наш элемент будет выполнять этот код при каждом срабатывании события.
Какие события возникают у элементов:
- Для элементов "Button" ("Кнопка"), "Check Box" ("Переключатель"), "Option Button" ("Кнопка выбора") обрабатывается событие click - момент, когда левая кнопка мыши была нажата и уже отпущена над элементом.
- Для элементов "Combo Box" ("Выпадающий список"), "Spin Button" ("Кнопки прокрутки"), "List Box" ("Список"), "Scroll Bar" ("Прокрутка") обрабатывается событие change - момент, когда активное значение элемента уже изменено. Если самостоятельно изменить связную ячейку элемента, то активное значение поменяется но событие не сработает.
Как это выглядит:
Этого достаточно для большинства задач. Для замены надписи на кнопке выделите элемент (Ctrl + левая кнопка мыши) и нажмите ещё раз левой кнопкой мыши на текст.
Мы получим больше разных событий при использовании ActiveX объектов, но использовать их в простых проектах не рекомендуем, если достаточно элементов формы.
Обработчики для элементов ActiveX Controls:
Создать обработчик можно так:
- Создаём графический элемент ActiveX на листе, переключатель "Design Mode" должен быть активен для редактирования элемента.
- Создадим процедуру обработки одним из вариантов:
- Событие по-умолчанию для объекта можно создать просто дважды нажав левой кнопкой мыши на нём. Откроется окно редактора кода VBA уже с процедурой, которая и будет обработчиком.
- Выделяем элемент, нажимаем кнопку "Visual Basic" для отображения среди разработки. В структуре проекта слева выбираем или создаём модуль и открываем его (2 клика левой кнопкой мыши). В окне модуля сверху(рисунок ниже) в левом выпадающем списке выбираем название нашего объекта объект, в правом выпадающем списке выбираем нужное событие для обработки.
- Пишем внутри процедуры действия, которые будут выполняться при срабатывании события.
- Закрываем редактор. Код сохраняется автоматически.
- Выключаем переключатель "Design Mode" и проверяем работу графического элемента.
Как это выглядит:
Совсем не сложно создать обработчик, согласитесь.
Еще один важный момент, это название видимого объекта. На рис. обведено поле, где отображается название объекта, его можно изменить в любое время, однако рекомендуется указывать название объекта сразу же после его создания. Дело в том, что в коде VBA название автоматически на новые не поменяются, то есть, если изменить имя объекта нужно будет вручную менять все старые названия объекта на новые.
Возможные события объектов ActiveX:
- Activate() - Срабатывает когда активируется (начинается отображение) лист, книга или встроенные графики.
- AddControl(ByVal Control As MSForms.Control) - Сратабывает при пользовательском или программном добавлении элемента управления формы на пространство формы.
- Control - экземпляр элемента формы, с которым выполняется работа.
- AddinInstall() - Срабатывает когда книга устанавливается как надстройка.
- AddinUninstall() - Срабатывает когда книга удаляется как надстройка.
- AfterSave(ByVal Success As Boolean) - Применяется к книге. Срабатывает после сохранения книги.
- Success - будет содержать значение TRUE, если сохранение было успешным, или FALSE - в противном случае.
- BeforeClose(Cancel As Boolean) - Применяется к книге. Срабатывает перед закрытием книги.
- Cancel - изначально установлен FALSE, если в ходе выполнения обработчика присвоить параметру TRUE, выполнение останавливается и не книга не закрывается.
- BeforeDelete() - Срабатывает перед удалением объекта, предположительно листа.
- BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) - Срабатывает когда дважды нажимается левая кнопка мыши.
- Target - ссылка на диапазон ячеек, по которым выполняется нажатие.
- Cancel - изначально установлен FALSE, если в ходе выполнения обработчика присвоить параметру TRUE, то действие по-умолчанию выполняться не будет, если такое есть.
- BeforePrint(Cancel as Boolean) - Применяется к книге. Срабатывает перед печатью книги.
- Cancel - изначально установлен FALSE, если в ходе выполнения обработчика присвоить параметру TRUE, документ не будет напечатан.
- BeforeRightClick(ByVal Target As Range, Cancel As Boolean) - Срабатывает при нажатии правой кнопки мыши на объекте и выполняется перед отображением меню.
- Target - ссылка на выделенные ячейки на листе.
- Cancel - изначально установлен FALSE, если в ходе выполнения обработчика присвоить параметру TRUE, меню открыто не будет.
- BeforeSave(ByVal SaveAsUI as Boolean, Cancel as Boolean) - Применяется к книге. Срабатывает перед сохранением книги.
- SaveAsUI - установлен TRUE, если диалоговое окно сохранения будет показано, в противном случае FALSE.
- Cancel - изначально установлен FALSE, если в ходе выполнения обработчика присвоить параметру TRUE, книга не будет сохранена.
- Calculate() - Срабатывает когда происходит перерасчёт формул листа.
- Change(ByVal Target As Range) - Срабатывает когда меняется содержимое ячейки на листе.
- Target - ссылка на ячейку, которая меняет содержимое. Если обработчик назначен элементу формы то аргументов у функции не будет.
- Click() - Срабатывает при нажатии левой кнопкой мыши на объекте.
- DblClick(ByVal Cancel As MSForms.ReturnBoolean) - Срабатывает при двойном нажатии левой кнопкой мыши на объекте.
- Cancel - изначально установлен FALSE, если в ходе выполнения обработчика присвоить параметру TRUE, тогда отменяется стандартное поведение объекта при двойном нажатии, если такое существует.
- Deactivate() - Срабатывает когда уходит из обзора (прекращает отображение) лист, книга, встроенный график.
- FollowHyperlink(ByVal Target As Hyperlink) - Срабатывает когда нажимается гиперссылка на листе.
- Target - экземпляр Hyperlink содержащий назначение гиперссылки.
- Initialize() - Срабатывает при создании нового экземпляра объекта (класса или формы).
- KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) - Срабатывает при нажатии клавиши, когда фокус приложения расположен на объекте.
- KeyCode - номер кнопки, которая нажата на клавиатуре.
- Shift - указывает позицию клавиш Ctrl, Shift, Alt. Возможные варианты:
- 1 - нажата клавиша Shift.
- 2 - нажата клавиша Ctrl.
- 4 - нажата клавиша Alt.
- 3 - нажата одновременно клавиша Shift и Ctrl.
- 5 - нажата клавиша Shift и Alt.
- 6 - нажата одновременно клавиша Ctrl и Alt.
- 7 - нажата одновременно клавиша Shift, Ctrl и Alt.
- KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) - Срабатывает при добавлении нового символа в поле.
- KeyAscii - код символа, который добавляется в поле.
- KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) - Срабатывает при отпускании клавиши, когда фокус приложения расположен на объекте.
- KeyCode - номер кнопки, которая отпускается на клавиатуре.
- Shift - указывает позицию клавиш Ctrl, Shift, Alt. Возможные варианты:
- 1 - нажата клавиша Shift.
- 2 - нажата клавиша Ctrl.
- 4 - нажата клавиша Alt.
- 3 - нажата одновременно клавиша Shift и Ctrl.
- 5 - нажата клавиша Shift и Alt.
- 6 - нажата одновременно клавиша Ctrl и Alt.
- 7 - нажата одновременно клавиша Shift, Ctrl и Alt.
- Layout() - Срабатывает при смене положения элемента(-ов).
- MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) - Срабатывает при нажатии кнопки мыши на объекте.
- Button - число определяет какая кнопка нажата. Возможные варианты:
- 1 - нажата основная(левая) кнопка мыши.
- 2 - нажата вторая(правая) кнопка мыши.
- Shift - указывает позицию клавиш Ctrl, Shift, Alt. Возможные варианты:
- 1 - нажата клавиша Shift.
- 2 - нажата клавиша Ctrl.
- 4 - нажата клавиша Alt.
- 3 - нажата одновременно клавиша Shift и Ctrl.
- 5 - нажата клавиша Shift и Alt.
- 6 - нажата одновременно клавиша Ctrl и Alt.
- 7 - нажата одновременно клавиша Shift, Ctrl и Alt.
- X - позиция по оси абсцисс.
- Y - позиция по оси ординат.
- MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) - Срабатывает при перемещении указателя мыши над объектом. Не обязательно с нажатыми кнопками.
- Button - число определяет какая кнопка нажата. Возможные варианты:
- 0 - не нажата никакая кнопка мыши.
- 1 - нажата основная(левая) кнопка мыши.
- 2 - нажата вторая(правая) кнопка мыши.
- Shift - указывает позицию клавиш Ctrl, Shift, Alt. Возможные варианты:
- 1 - нажата клавиша Shift.
- 2 - нажата клавиша Ctrl.
- 4 - нажата клавиша Alt.
- 3 - нажата одновременно клавиша Shift и Ctrl.
- 5 - нажата клавиша Shift и Alt.
- 6 - нажата одновременно клавиша Ctrl и Alt.
- 7 - нажата одновременно клавиша Shift, Ctrl и Alt.
- X - позиция по оси абсцисс.
- Y - позиция по оси ординат.
- MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) - Срабатывает при отпускании кнопки мыши.
- Button - число определяет какая кнопка нажата. Возможные варианты:
- 1 - нажата основная(левая) кнопка мыши.
- 2 - нажата вторая(правая) кнопка мыши.
- Shift - указывает позицию клавиш Ctrl, Shift, Alt. Возможные варианты:
- 1 - нажата клавиша Shift.
- 2 - нажата клавиша Ctrl.
- 4 - нажата клавиша Alt.
- 3 - нажата одновременно клавиша Shift и Ctrl.
- 5 - нажата клавиша Shift и Alt.
- 6 - нажата одновременно клавиша Ctrl и Alt.
- 7 - нажата одновременно клавиша Shift, Ctrl и Alt.
- X - позиция по оси абсцисс.
- Y - позиция по оси ординат.
- NewChart(ByVal Ch as Chart) - Срабатывает когда график или диаграмма вставляется, импортируется на лист.
- Ch - ссылка на созданный объект.
- NewSheet(ByVal Sh as Object) - Срабатывает каждый раз когда создаётся новый лист в книге.
- Sh - ссылка на созданный объект.
- Open() - Срабатывает когда открывается документ (книга).
- RemoveControl(ByVal Control As MSForms.Control) - Сратабывает при пользовательском или программном удалении элемента управления с формы.
- Control - экземпляр элемента формы, с которым выполняется работа.
- Resize() - Срабатывает при изменении размера объекта, которому назначен обработчик.
- SelectionChange(ByVal Target As Range) - Срабатывает когда диапазон выделенных ячеек меняется на листе.
- Target - ссылка на диапазон ячеек, которые были только что выделены.
- SheetActivate(ByVal Sh as Object) - Срабатывает когда активируется (начинает отображение) лист.
- Sh - ссылка на переключаемый лист.
- SheetBeforeDelete(ByVal Sh as Object) - Срабатывает перед тем как удаляется лист.
- Sh - ссылка на удаляемый объект. Может быть как лист так и график.
- SheetBeforeRightClick(ByVal Sh as Object, ByVal Target as Range, Cancel as Boolean) - Срабатывает при нажатии правой кнопки мыши на листе и выполняется перед отображением меню.
- Sh - ссылка на активный лист.
- Target - ссылка на выделенные ячейки на листе.
- Cancel - изначально установлен FALSE, если в ходе выполнения обработчика присвоить параметру TRUE, меню открыто не будет.
- SheetCalculate(ByVal Sh as Object) - Срабатывает когда происходит перерасчёт формул листа.
- Sh - ссылка на текущий лист перерасчёта.
- SheetChange(ByVal Sh as Object, ByVal Target as Range) - Срабатывает когда меняется содержимое ячейки на листе.
- Sh - ссылка на текущий лист с изменениями.
- Target - ссылка на ячейку, которая меняет содержимое.
- SheetDeactivate(ByVal Sh as Object) - Срабатывает для листа, который исчезает из обзора.
- Sh - ссылка на лист или график, который теряет обзор.
- SheetFollowHyperlink(ByVal Sh as Object, ByVal Target as Hyperlink) - Срабатывает когда нажимается гиперссылка на листе.
- Sh - ссылка на лист, в котором нажата гиперссылка.
- Target - экземпляр Hyperlink содержащий назначение гиперссылки.
- SheetSelectionChange(ByVal Sh as Object, ByVal Target as Range) - Срабатывает когда диапазон выделенных ячеек меняется на листе.
- Sh - ссылка на активный лист.
- Target - ссылка на диапазон ячеек, которые были только что выделены.
- SheetTableUpdate(ByVal Sh as Object, ByVal Target as TableObject) - Срабатывает когда обновляется таблица на одном из листов.
- Sh - ссылка на обновляемый лист.
- Target - элементы таблицы.
- Name - Параметр необязателен. Описание обновления.
- Terminate() - Срабатывает при полном удалении объекта (класса или формы) из памяти.
- WindowActivate(ByVal Wn as Window) - Срабатывает при переключении и активации одного из окон Excel.
- Wn - экземпляр активированного окна.
- WindowDeactivate(ByVal Wn As Window) - Срабатывает при переключении и деактивации одного из окон Excel.
- Wn - экземпляр деактивированного окна.
- WindowResize(ByVal Wn As Window) - Срабатывает когда размеры окна меняются.
- Wn - экземпляр окна изменяемого размера.
- Zoom(Percent As Integer) - Срабатывает при изменении масштаба отображения объекта.
- Percent - процент отображения содержимого. В обычном режиме значение 100.
|