次の方法で共有


Excel でアプリケーション レベルのイベント ハンドラーを作成する

概要

特定のイベントがトリガーされるたびに特定のイベント ハンドラーを実行する場合は、Application オブジェクトのイベント ハンドラーを記述できます。 Application オブジェクトのイベント ハンドラーはグローバルです。つまり、Microsoft Excel が開いている限り、イベントが発生したときにアクティブなブックに関係なく、適切なイベントが発生したときにイベント ハンドラーが実行されます。

この記事では、アプリケーション レベルのイベント ハンドラーを作成する方法について説明し、例を示します。

詳細

アプリケーション レベルのイベント ハンドラーを作成するには、次の基本的な手順を使用する必要があります。

  • WithEvents キーワード (keyword)を使用して Application オブジェクトの変数を宣言します。 WithEvents キーワード (keyword)を使用して、ActiveX オブジェクト (Application オブジェクトなど) によってトリガーされるイベントに応答するオブジェクト変数を作成できます。注: WithEvents はクラス モジュールでのみ有効です。
  • 特定の Application イベントのプロシージャを作成します。 たとえば、WithEvents を使用して宣言したオブジェクトの WindowResize、WorkbookOpen、SheetActivate イベントのプロシージャを作成できます。
  • イベント ハンドラーを開始するプロシージャを作成して実行します。

次の例では、次の手順を使用して、ブック ウィンドウのサイズを変更するたびにメッセージ ボックスを表示するグローバル イベント ハンドラーを設定します (イベント ハンドラーを発生させるイベント)。

イベント ハンドラーの作成と開始

  1. 新しいブックを開きます。

  2. [ツール] メニューの [マクロ] をポイントし、[Visual Basic エディター] をクリックします。

    注:

    Microsoft Office Excel 2007 で、[開発] タブの [コード] グループで [Visual Basic] をクリックします。

  3. [挿入] メニューの [クラス モジュール] をクリックします。 これにより、"<book name> - Class1 (Code)" というタイトルのモジュールがプロジェクトに挿入されます。

  4. Class1 (Code) モジュールに次のコード行を入力します。

    Public WithEvents appevent As Application
    

    WithEvents キーワード (keyword)を使用すると、class1 (Code) モジュール ウィンドウの [オブジェクト] ドロップダウンで appevent 変数を使用できるようになります。

  5. [Class1 (Code)] モジュール ウィンドウで、[オブジェクト] ドロップダウンをクリックし、一覧の [appevent] をクリックします。

  6. クラス 1 (コード) モジュール ウィンドウで、[プロシージャ] ドロップダウンをクリックし、一覧で [WindowResize] をクリックします。 これにより、Class1 (Code) モジュール シートに次のものが追加されます。

       Private Sub appevent_WindowResize(ByVal Wb As Excel.Workbook, _
           ByVal Wn As Excel.Window)
    
       End Sub
    
  7. Class1 (Code) モジュール シートにコードを追加して、次のように表示されるようにします。

           Public WithEvents appevent As Application
    
    Private Sub appevent_WindowResize(ByVal Wb As Excel.Workbook, _
               ByVal Wn As Excel.Window)
    
    MsgBox "you resized a window"
    
    End Sub
    

    次に、 クラスのインスタンスを作成し、Class1 のインスタンスの appevent オブジェクトを Application に設定する必要があります。 これは、デザイン時に WithEvents という変数を宣言すると、それに関連付けられているオブジェクトがないために発生します。 WithEvents 変数は、他のオブジェクト変数と同じです。オブジェクトを作成し、WithEvents 変数にオブジェクトへの参照を割り当てる必要があります。

  8. [挿入] メニューの [モジュール] をクリックして、一般的な種類のモジュール シートをプロジェクトに挿入します。

  9. このモジュール シートで、次のコードを入力します。

          Dim myobject As New Class1
    
          Sub Test()
              Set myobject.appevent = Application
          End Sub
    
  10. テスト マクロを実行します。

    Microsoft Excel でブック ウィンドウのサイズを変更するたびに、イベント ハンドラーを実行するように設定しました。

  11. [ファイル] メニューの [閉じる] をクリック し、Microsoft Excel に戻ります

  12. ブック ウィンドウのサイズを変更します。 "ウィンドウのサイズを変更しました" というメッセージ ボックスが表示されます。

イベント ハンドラーをオフにする方法

上記のプロジェクトを含むブックを閉じると、アプリケーション レベルのイベント ハンドラーがオフになります。 プログラムによってイベント ハンドラーをオフにするには、次の操作を行います。

  1. Visual Basic エディターを起動します。

  2. 手順 9 で入力したマクロ コードで、マクロを次のように変更します。

          Sub test()
              Set myobject.appevent = Nothing
          End Sub
    
  3. テスト マクロをもう一度実行します。

  4. [ファイル] メニューの [閉じる] をクリック し、Microsoft Excel に戻ります

  5. ブック ウィンドウのサイズを変更します。

    メッセージ ボックスは表示されません。