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

Вы можете писать процедуры обработки событий на уровне приложения или проекта.You can write event procedures at the application level or the project level. Например, событие Activate возникает на уровне проекта при активации проекта, а событие NewProject — на уровне приложения при создании проекта.For example, the Activate event occurs at the project level when a project is activated and the NewProject event occurs at the application level when a project is created.

Процедуры обработки событий в объекте Project доступны для любого открытого проекта.Event procedures in the Project object are available for any open project. Чтобы можно было писать процедуры обработки событий для объекта Application, необходимо создать объект, используя ключевое слово WithEvents в модуле класса.To write event procedures for the Application object, you must create a new object using the WithEvents keyword in a class module. Ниже рассказывается, как создать и проверить простой обработчик событий приложения.The following steps show how to create and test a simple application event handler:

  1. В редакторе Visual Basic в меню параметров для объекта VBAProject выберите пункт Insert (Вставка), а затем щелкните Class Module (Модуль класса). В результате будет создан класс с именем Class1.In the Visual Basic Editor, on the option menu for VBAProject, choose Insert, and then choose Class Module to create a class named Class1. Вы можете переименовать модуль класса в области Properties (Свойства).You can rename the class module in the Properties pane. В примерах ниже этот класс назван TestClass.In the following examples, the class is named TestClass.

  2. Вставьте указанный ниже код в модуль TestClass.Paste the following code in the TestClass module.

  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 и вставьте в него указанный ниже код.Open the ThisProject module and paste in the following code.
  Option Explicit 
Private tClass As New TestClass 
 
Sub TestNewProjectEvent() 
    Set tClass.oApp = Application 
    tClass.oApp.Projects.Add 
    Projects.Add 
End Sub
  1. Запустите макрос TestNewProjectEvent.Run the TestNewProjectEvent macro. Макрос вызывает метод Projects.Add дважды: один раз через объект TestClass и второй раз непосредственно через объект Application.The macro calls the Projects.Add method twice—once through the TestClass object and once directly through the Application object. Когда приложение Project создаст первый проект, откроется диалоговое окно Microsoft Project с сообщением Вы создали проект Project2.When the Project application creates the first project, the result is a Microsoft Project dialog box with the message You created the Project2 project. Если нажать кнопку OK, Project создаст второй проект. При этом отобразится еще одно диалоговое окно с сообщением Вы создали проект Project3.When you choose OK, Project creates the second project and shows another dialog box with the message You created the Project3 project.

Важно! Для событий уровня приложения необходимо регистрировать обработчики событий после настройки параметра Application.Visible = True.Important For application-level events, register event handlers after you set Application.Visible = True.

Если вы создадите экземпляр Project из другого приложения и зарегистрируете какое-либо событие уровня приложения до того как присвоите свойству Visible объекта Application значение True, свойства и методы дочерних объектов объекта Application не будут работать.If you instantiate Project from another application and register an application-level event before setting the Visible property of the Application object to True, the properties and methods of child objects of Application do not work. Например, свойство Application.ActiveProject.Name будет недоступно.For example, Application.ActiveProject.Name is not accessible.

Примечание. Если код события в вашем проекте находится в глобальном файле (Global.mpt), то этот код может быть запущен неожиданно либо заблокирован.Note Event code in your project can run unexpectedly, or can be blocked, if event code exists in the global file (Global.mpt).

  • Если код события имеется как в глобальных файлах, так и в файлах проекта, будет выполняться только код события проекта.If code exists for an event in both the global files and project files, only the code in the project event runs.

  • Если кода события нет в проекте, но он есть в глобальном файле, будет выполнен код глобального события.If code for an event does not exist in a project, but does exist in the global file, the code in the global event runs.

  • Если код одного из трех событий Application.ProjectBeforeClose, Application.ProjectBeforeSave или Project.Open имеется в глобальном файле, а не в проекте, он затрагивает и глобальные файлы, и файлы проекта.If code for one of the three events Application.ProjectBeforeClose, Application.ProjectBeforeSave, or Project.Open exists in the global file, but not in the project, it affects both the global and project files. Если код этих событий имеется и в глобальных файлах, и в файлах проекта, код в глобальном файле затрагивает глобальный файл, а код в файле проекта затрагивает проект.If code exists for those events in both the global and project files, the code in the global file affects the global file, and the code in the project file affects the project.

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.