Главная » Статьи » VBA и макросы

Обработчики событий

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

 

Обработчики для элементов Form Controls:

Присоединить к элементу Form Controls можно 1 обработчик, это будет макрос и найти его можно в окне макросов. Несколько шагов назначения обработчика:

  1. Создаём новый элемент Form Controls.
  2. При создании кнопки сразу открывается окно назначения макроса, для других элементов нужно на нём нажать правой кнопкой мыши и выбрать пункт "Assign Macro...".
  3. Если нужный макрос уже существует, выбираем его из списка и нажимаем "OK" для завершения. В другом случае нажимаем "New" для ручного создания макроса или "Record" для автоматической записи макроса.
  4. Пишем код макроса или записываем действия автоматически, нажимаем "OK". Теперь наш элемент будет выполнять этот код при каждом срабатывании события.

Какие события возникают у элементов:

  • Для элементов "Button" ("Кнопка"), "Check Box" ("Переключатель"), "Option Button" ("Кнопка выбора") обрабатывается событие click - момент, когда левая кнопка мыши была нажата и уже отпущена над элементом.
  • Для элементов "Combo Box" ("Выпадающий список"), "Spin Button" ("Кнопки прокрутки"), "List Box" ("Список"), "Scroll Bar" ("Прокрутка") обрабатывается событие change - момент, когда активное значение элемента уже изменено. Если самостоятельно изменить связную ячейку элемента, то активное значение поменяется но событие не сработает.

 Как это выглядит:

Events Form Controls

Этого достаточно для большинства задач. Для замены надписи на кнопке выделите элемент (Ctrl + левая кнопка мыши) и нажмите ещё раз левой кнопкой мыши на текст.


Мы получим больше разных событий при использовании ActiveX объектов, но использовать их в простых проектах не рекомендуем, если достаточно элементов формы.

Обработчики для элементов ActiveX Controls:

Создать обработчик можно так:

  1. Создаём графический элемент ActiveX на листе, переключатель "Design Mode" должен быть активен для редактирования элемента.
  2. Создадим процедуру обработки одним из вариантов:
    • Событие по-умолчанию для объекта можно создать просто дважды нажав левой кнопкой мыши на нём. Откроется окно редактора кода VBA уже с процедурой, которая и будет обработчиком.
    • Выделяем элемент, нажимаем кнопку "Visual Basic" для отображения среди разработки. В структуре проекта слева выбираем или создаём модуль и открываем его (2 клика левой кнопкой мыши). В окне модуля сверху(рисунок ниже) в левом выпадающем списке выбираем название нашего объекта объект, в правом выпадающем списке выбираем нужное событие для обработки.
  3. Пишем внутри процедуры действия, которые будут выполняться при срабатывании события.
  4. Закрываем редактор. Код сохраняется автоматически.
  5. Выключаем переключатель "Design Mode" и проверяем работу графического элемента.

Как это выглядит:

Create event listenerСовсем не сложно создать обработчик, согласитесь. 

Name elementЕще один важный момент, это название видимого объекта. На рис. обведено поле, где отображается название объекта, его можно изменить в любое время, однако рекомендуется указывать название объекта сразу же после его создания. Дело в том, что в коде 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.

 

Категория: VBA и макросы | Добавил: Руслан_Савелов (18.08.2016)
Просмотров: 4653 | Рейтинг: 0.0/0
Всего комментариев: 0
ComForm">
avatar