共用方式為


使用事件搭配 Application 和 Project 物件

您可以在應用程式層級或專案層級編寫事件程序。 例如,Activate 事件會在啟用專案時於專案層級發生,NewProject 事件則會在建立專案時於應用程式層級發生。

Project 物件中的事件程序可供任何開啟的專案使用。 若要編寫 Application 物件的事件程序,您必須在類別模組中使用 WithEvents 關鍵字來建立新的物件。 下列步驟會顯示如何建立和測試簡單的應用程式事件處理常式:

  1. 在 Visual Basic 編輯器中,於 VBAProject 的 [選項] 功能表上,選擇 [插入],然後選擇 [類別模組] 來建立名為 Class1 的類別。 您可以在 [屬性] 窗格中重新命名類別模組。 在下列範例中,類別名為 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 專案] 的訊息。 當您選擇 [確定] 時,Project 就會建立第二個專案,並顯示另一個對話方塊,其中會出現您已建立 Project3 專案訊息。

重要針對應用層級事件,請在設定 Application.Visible = True之後註冊事件處理常式。

如果您從另一個應用程式產生專案並登錄應用程式層級事件之後,將 [應用程式] 物件的 [可見] 屬性設為 [True],則應用程式子物件的屬性和方法會無法運作。 例如,Application.ActiveProject.Name 無法存取。

附註 如果通用檔案 (Global.mpt) 中有事件代碼存在,專案中的事件代碼就可能會非預期地執行,也可能會被封鎖。

  • 如果事件的程式碼同時存在通用檔案及專案檔案中,就只會執行專案事件中的程式碼。

  • 如果事件的程式碼不在專案中,而是在通用檔案中,則會執行通用事件中的程式碼。

  • 如果 Application.ProjectBeforeCloseApplication.ProjectBeforeSaveProject.Open 事件之一的程式碼在通用檔案中,而不在專案中,就會同時影響通用檔案以及專案檔案。 如果這些事件的程式碼同時存在通用檔案以及專案檔案中,則通用檔案中的程式碼就會影響通用檔案,而專案檔案中的程式碼就會影響專案。

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應