Application オブジェクトおよび Project オブジェクトでイベントを使用する

アプリケーション レベルまたはプロジェクト レベルで、イベント プロシージャを記述することができます。 たとえば、プロジェクトがアクティブ化されると Activate イベントがプロジェクト レベルで発生し、プロジェクトが作成されると、NewProject イベントがアプリケーション レベルで発生するようにできます。

Project オブジェクトのイベント プロシージャは、開いている任意のプロジェクトに対して使用できます。 一方、Application オブジェクトに対してイベント プロシージャを記述するには、クラス モジュールで WithEvents キーワードを使用してオブジェクトを新しく作成する必要があります。 次の使用例では、簡単なアプリケーション レベルのイベント ハンドラーを作成してテストする方法を示します。

  1. Visual Basic エディターで、VBAProject の [オプション] メニューから [挿入] を選択し、[クラス モジュール] を選択して Class1 という名前のクラスを作成します。 クラス モジュールの名前は、[プロパティ] ウィンドウで変更できます。 次の例では、クラスに TestClass という名前が付けられています。

  2. 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] モジュールを開き、次のコードを貼り付けます。
  Option Explicit 
Private tClass As New TestClass 
 
Sub TestNewProjectEvent() 
    Set tClass.oApp = Application 
    tClass.oApp.Projects.Add 
    Projects.Add 
End Sub
  1. Run the TestNewProjectEvent macro. The macro calls the Projects.Add method twice—once through the TestClass object and once directly through the Application object. 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 によって 2 つ目のプロジェクトが作成され、別のダイアログ ボックスに「Project3 というプロジェクトを作成しました」というメッセージが表示されます。

大事なアプリケーション レベルのイベントの場合は、 を設定Application.Visible = Trueした後でイベント ハンドラーを登録します。

Application オブジェクトの Visible プロパティを True に設定する前に、別のアプリケーションから Project をインスタンス化して、アプリケーション レベルのイベントを登録すると、Application オブジェクトの子オブジェクトのプロパティとメソッドが機能しません。 たとえば、Application.ActiveProject.Name にはアクセスできません。

グローバル ファイル (Global.mpt) 内にイベント コードがある場合、プロジェクトのイベント コードが予期しないときに実行されたり、ブロックされたりすることがあります。

  • イベントに対するコードがグローバル ファイルとプロジェクト ファイルの両方にある場合、プロジェクト イベントのコードだけが実行されます。

  • イベントに対するコードがプロジェクト内に存在せず、グローバル ファイル内に存在する場合は、グローバル イベントのコードが実行されます。

  • Application.ProjectBeforeCloseApplication.ProjectBeforeSave 、または Project.Open の 3 つの各イベントに対するコードがグローバル ファイル内に存在し、プロジェクト内に存在しない場合は、そのコードがグローバル ファイルとプロジェクト ファイルの両方に適用されます。 これらのイベントに対するコードがグローバル ファイルとプロジェクト ファイルの両方に存在する場合は、グローバル ファイルにはグローバル ファイル内のコードが、プロジェクトにはプロジェクト ファイル内のコードが適用されます。

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。