使用事件搭配 Application 和 Project 物件
您可以在應用程式層級或專案層級編寫事件程序。 例如,Activate 事件會在啟用專案時於專案層級發生,NewProject 事件則會在建立專案時於應用程式層級發生。
Project 物件中的事件程序可供任何開啟的專案使用。 若要編寫 Application 物件的事件程序,您必須在類別模組中使用 WithEvents 關鍵字來建立新的物件。 下列步驟會顯示如何建立和測試簡單的應用程式事件處理常式:
在 Visual Basic 編輯器中,於 VBAProject 的 [選項] 功能表上,選擇 [插入],然後選擇 [類別模組] 來建立名為 Class1 的類別。 您可以在 [屬性] 窗格中重新命名類別模組。 在下列範例中,類別名為 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 專案] 的訊息。 當您選擇 [確定] 時,Project 就會建立第二個專案,並顯示另一個對話方塊,其中會出現您已建立 Project3 專案訊息。
重要針對應用層級事件,請在設定 Application.Visible = True
之後註冊事件處理常式。
如果您從另一個應用程式產生專案並登錄應用程式層級事件之後,將 [應用程式] 物件的 [可見] 屬性設為 [True],則應用程式子物件的屬性和方法會無法運作。 例如,Application.ActiveProject.Name
無法存取。
附註 如果通用檔案 (Global.mpt) 中有事件代碼存在,專案中的事件代碼就可能會非預期地執行,也可能會被封鎖。
如果事件的程式碼同時存在通用檔案及專案檔案中,就只會執行專案事件中的程式碼。
如果事件的程式碼不在專案中,而是在通用檔案中,則會執行通用事件中的程式碼。
如果 Application.ProjectBeforeClose 、 Application.ProjectBeforeSave 或 Project.Open 事件之一的程式碼在通用檔案中,而不在專案中,就會同時影響通用檔案以及專案檔案。 如果這些事件的程式碼同時存在通用檔案以及專案檔案中,則通用檔案中的程式碼就會影響通用檔案,而專案檔案中的程式碼就會影響專案。
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。