Использование событий с объектами Application и Project
Вы можете писать процедуры обработки событий на уровне приложения или проекта. Например, событие Activate возникает на уровне проекта при активации проекта, а событие NewProject — на уровне приложения при создании проекта.
Процедуры обработки событий в объекте Project доступны для любого открытого проекта. Чтобы можно было писать процедуры обработки событий для объекта Application, необходимо создать объект, используя ключевое слово WithEvents в модуле класса. Ниже рассказывается, как создать и проверить простой обработчик событий приложения.
В редакторе Visual Basic в меню параметров для объекта VBAProject выберите пункт Insert (Вставка), а затем щелкните Class Module (Модуль класса). В результате будет создан класс с именем Class1. Вы можете переименовать модуль класса в области Properties (Свойства). В примерах ниже этот класс назван TestClass.
Вставьте указанный ниже код в модуль 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
- Откройте модуль ThisProject и вставьте в него указанный ниже код.
Option Explicit
Private tClass As New TestClass
Sub TestNewProjectEvent()
Set tClass.oApp = Application
tClass.oApp.Projects.Add
Projects.Add
End Sub
- Запустите макрос 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 и обратная связь.