Создание обработчиков событий уровня приложения в Excel

Сводка

Если требуется, чтобы конкретный обработчик событий запускался при каждом срабатывании определенного события, можно написать обработчик событий для объекта Application. Обработчики событий для объекта Application являются глобальными, что означает, что, пока microsoft Excel открыт, обработчик событий будет выполняться при возникновении соответствующего события независимо от того, какая книга активна при возникновении события.

В этой статье описывается создание обработчика событий уровня приложения и приведен пример.

Дополнительная информация

Чтобы создать обработчик событий уровня приложения, необходимо выполнить следующие основные действия.

  • Объявите переменную для объекта Application с помощью ключевое слово WithEvents. Ключевое слово WithEvents можно использовать для создания объектной переменной, которая реагирует на события, активируемые объектом ActiveX (например, объектом Application). ПРИМЕЧАНИЕ. WithEvents действителен только в модуле класса.
  • Создайте процедуру для определенного события приложения. Например, можно создать процедуру для события WindowResize, WorkbookOpen или SheetActivate объекта, объявленного с помощью WithEvents.
  • Создайте и запустите процедуру, которая запускает обработчик событий.

В следующем примере эти действия используются для настройки глобального обработчика событий, который отображает окно сообщения при изменении размера окна книги (событие, срабающее обработчик событий).

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

  1. Откройте новую книгу.

  2. В меню Сервис наведите указатель мыши на пункт Макрос, а затем выберите Visual Basic Редактор.

    Примечание.

    В Microsoft Office Excel 2007 щелкните Visual Basic в группе Код на вкладке Разработчик .

  3. В меню Вставка щелкните Модуль класса. В проект будет вставлен модуль с< именем book name> - Class1 (Code)".

  4. Введите следующую строку кода в модуле Class1 (Code):

    Public WithEvents appevent As Application
    

    Ключевое слово WithEvents делает переменную appevent доступной в раскрывающемся списке Объект в окне модуля Class1 (Code).

  5. В окне модуля Class1 (Code) щелкните раскрывающийся список Объект и выберите appevent в списке.

  6. В окне модуля Class1 (Code) щелкните раскрывающийся список Процедура, а затем в списке выберите WindowResize. При этом на лист модуля Class1 (Code) будет добавлено следующее:

       Private Sub appevent_WindowResize(ByVal Wb As Excel.Workbook, _
           ByVal Wn As Excel.Window)
    
       End Sub
    
  7. Добавьте код на лист модуля Class1 (Code), чтобы он выглядел следующим образом:

           Public WithEvents appevent As Application
    
    Private Sub appevent_WindowResize(ByVal Wb As Excel.Workbook, _
               ByVal Wn As Excel.Window)
    
    MsgBox "you resized a window"
    
    End Sub
    

    Затем необходимо создать экземпляр класса , а затем присвоить объекту appevent экземпляра Class1 значение Application. Это происходит потому, что при объявлении переменной WithEvents во время разработки с ней нет связанного объекта. Переменная WithEvents так же, как и любая другая объектная переменная. Необходимо создать объект и назначить ссылку на объект переменной WithEvents.

  8. В меню Вставка выберите пункт Модуль, чтобы вставить лист модуля общего типа в проект.

  9. На этом листе модуля введите следующий код:

          Dim myobject As New Class1
    
          Sub Test()
              Set myobject.appevent = Application
          End Sub
    
  10. Запустите тестовый макрос.

    Вы только что настроили обработчик событий для запуска при каждом изменении размера окна книги в Microsoft Excel.

  11. В меню Файл выберите команду Закрыть и вернуться в Microsoft Excel.

  12. Изменение размера окна книги. Появится окно сообщения с сообщением "Вы изменяете размер окна".

Отключение обработчика событий

Если закрыть книгу, содержащую указанный выше проект, обработчик событий уровня приложения будет отключен. Чтобы программно отключить обработчик событий, сделайте следующее:

  1. Запустите Редактор Visual Basic.

  2. В коде макроса, введенном на шаге 9, измените макрос на:

          Sub test()
              Set myobject.appevent = Nothing
          End Sub
    
  3. Снова запустите тестовый макрос.

  4. В меню Файл выберите команду Закрыть и вернуться в Microsoft Excel.

  5. Изменение размера окна книги.

    Окно сообщения не будет отображаться.