Excel でアプリケーション レベルのイベント ハンドラーを作成する
概要
特定のイベントがトリガーされるたびに特定のイベント ハンドラーを実行する場合は、Application オブジェクトのイベント ハンドラーを記述できます。 Application オブジェクトのイベント ハンドラーはグローバルです。つまり、Microsoft Excel が開いている限り、イベントが発生したときにアクティブなブックに関係なく、適切なイベントが発生したときにイベント ハンドラーが実行されます。
この記事では、アプリケーション レベルのイベント ハンドラーを作成する方法について説明し、例を示します。
詳細
アプリケーション レベルのイベント ハンドラーを作成するには、次の基本的な手順を使用する必要があります。
- WithEvents キーワード (keyword)を使用して Application オブジェクトの変数を宣言します。 WithEvents キーワード (keyword)を使用して、ActiveX オブジェクト (Application オブジェクトなど) によってトリガーされるイベントに応答するオブジェクト変数を作成できます。注: WithEvents はクラス モジュールでのみ有効です。
- 特定の Application イベントのプロシージャを作成します。 たとえば、WithEvents を使用して宣言したオブジェクトの WindowResize、WorkbookOpen、SheetActivate イベントのプロシージャを作成できます。
- イベント ハンドラーを開始するプロシージャを作成して実行します。
次の例では、次の手順を使用して、ブック ウィンドウのサイズを変更するたびにメッセージ ボックスを表示するグローバル イベント ハンドラーを設定します (イベント ハンドラーを発生させるイベント)。
イベント ハンドラーの作成と開始
新しいブックを開きます。
[ツール] メニューの [マクロ] をポイントし、[Visual Basic エディター] をクリックします。
注:
Microsoft Office Excel 2007 で、[開発] タブの [コード] グループで [Visual Basic] をクリックします。
[挿入] メニューの [クラス モジュール] をクリックします。 これにより、"<book name> - Class1 (Code)" というタイトルのモジュールがプロジェクトに挿入されます。
Class1 (Code) モジュールに次のコード行を入力します。
Public WithEvents appevent As Application
WithEvents キーワード (keyword)を使用すると、class1 (Code) モジュール ウィンドウの [オブジェクト] ドロップダウンで appevent 変数を使用できるようになります。
[Class1 (Code)] モジュール ウィンドウで、[オブジェクト] ドロップダウンをクリックし、一覧の [appevent] をクリックします。
クラス 1 (コード) モジュール ウィンドウで、[プロシージャ] ドロップダウンをクリックし、一覧で [WindowResize] をクリックします。 これにより、Class1 (Code) モジュール シートに次のものが追加されます。
Private Sub appevent_WindowResize(ByVal Wb As Excel.Workbook, _ ByVal Wn As Excel.Window) End Sub
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 変数にオブジェクトへの参照を割り当てる必要があります。
[挿入] メニューの [モジュール] をクリックして、一般的な種類のモジュール シートをプロジェクトに挿入します。
このモジュール シートで、次のコードを入力します。
Dim myobject As New Class1 Sub Test() Set myobject.appevent = Application End Sub
テスト マクロを実行します。
Microsoft Excel でブック ウィンドウのサイズを変更するたびに、イベント ハンドラーを実行するように設定しました。
[ファイル] メニューの [閉じる] をクリック し、Microsoft Excel に戻ります。
ブック ウィンドウのサイズを変更します。 "ウィンドウのサイズを変更しました" というメッセージ ボックスが表示されます。
イベント ハンドラーをオフにする方法
上記のプロジェクトを含むブックを閉じると、アプリケーション レベルのイベント ハンドラーがオフになります。 プログラムによってイベント ハンドラーをオフにするには、次の操作を行います。
Visual Basic エディターを起動します。
手順 9 で入力したマクロ コードで、マクロを次のように変更します。
Sub test() Set myobject.appevent = Nothing End Sub
テスト マクロをもう一度実行します。
[ファイル] メニューの [閉じる] をクリック し、Microsoft Excel に戻ります。
ブック ウィンドウのサイズを変更します。
メッセージ ボックスは表示されません。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示