Поделиться через


Использование событий с объектами Application и Project

Вы можете писать процедуры обработки событий на уровне приложения или проекта. Например, событие Activate возникает на уровне проекта при активации проекта, а событие NewProject — на уровне приложения при создании проекта.

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

  1. В редакторе Visual Basic в меню параметров для объекта VBAProject выберите пункт Insert (Вставка), а затем щелкните Class Module (Модуль класса). В результате будет создан класс с именем Class1. Вы можете переименовать модуль класса в области Properties (Свойства). В примерах ниже этот класс назван TestClass.

  2. Вставьте указанный ниже код в модуль TestClass.

  Option Explicit 
Public WithEvents oApp As Application 
 
Private Sub oApp_NewProject(ByVal pj As Project) 
    MsgBox "You created the " & pj.Name & " project." 
End Sub 
 
Private Sub Class_Initialize() 
    ' Add class initialization statements here, if needed. 
End Sub 
  1. Откройте модуль ThisProject и вставьте в него указанный ниже код.
  Option Explicit 
Private tClass As New TestClass 
 
Sub TestNewProjectEvent() 
    Set tClass.oApp = Application 
    tClass.oApp.Projects.Add 
    Projects.Add 
End Sub
  1. Запустите макрос TestNewProjectEvent. Макрос вызывает метод Projects.Add дважды: один раз через объект TestClass и второй раз непосредственно через объект Application. Когда приложение Project создаст первый проект, откроется диалоговое окно Microsoft Project с сообщением Вы создали проект Project2. Если нажать кнопку OK, Project создаст второй проект. При этом отобразится еще одно диалоговое окно с сообщением Вы создали проект Project3.

Важно Для событий уровня приложения регистрируйте обработчики событий после установки Application.Visible = True.

Если вы создадите экземпляр Project из другого приложения и зарегистрируете какое-либо событие уровня приложения до того как присвоите свойству Visible объекта Application значение True, свойства и методы дочерних объектов объекта Application не будут работать. Например, свойство Application.ActiveProject.Name будет недоступно.

Примечание. Если код события в вашем проекте находится в глобальном файле (Global.mpt), то этот код может быть запущен неожиданно либо заблокирован.

  • Если код события имеется как в глобальных файлах, так и в файлах проекта, будет выполняться только код события проекта.

  • Если кода события нет в проекте, но он есть в глобальном файле, будет выполнен код глобального события.

  • Если код одного из трех событий Application.ProjectBeforeClose, Application.ProjectBeforeSave или Project.Open имеется в глобальном файле, а не в проекте, он затрагивает и глобальные файлы, и файлы проекта. Если код этих событий имеется и в глобальных файлах, и в файлах проекта, код в глобальном файле затрагивает глобальный файл, а код в файле проекта затрагивает проект.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.