【簡単解説】VBA クラスモジュール 4実践 アプリケーションイベント 2021.06.29
今回は、クラスモジュールを活用したアプリケーションのイベントについてです。
内容
●アプリケーションイベント
・サンプルコード
・解説
サンプルファイル
記事に載せてあるコードサンプルのファイル ダウンロード
【お薦め】マクロ・プロシージャを管理する無料のツール!
Excelマクロ管理ツール
Excelマクロ管理ツール
アプリケーションイベント
サンプルコード
モジュールは次の2つを使用している。
・クラスモジュール
・標準モジュール
それぞれに記述のコードは次である。
●クラスモジュール
●標準モジュール
'宣言セクション Public WithEvents objApp As Excel.Application 'イベントに応答するタイプで宣言
Private Sub objApp_NewWorkbook(ByVal Wb As Workbook) 'アプリケーションイベント MsgBox Wb.name '新規ブックの名前を取得 End Sub
'宣言セクション Public clsApp As New Class1
Sub App_Set() 'Class1のobjAppにExcelアプリをセット Set clsApp.objApp = Excel.Application End Sub
Sub Add_Book() 'ワークブックを新規で追加 Workbooks.Add End Sub
記述に問題がなければ、クラスモジュールでアプリケーション型のイベントを確認できる。
下図のように、左のリストボックスでobjApp(アプリケーション型イベント応答タイプ変数)を選択し、右のリストボックスでイベントを選択する。
サンプルの変数名はobjAppだが、名前は自由につけて構わない。
標準モジュールの「App_Set」を実行すると、変数にアプリケーションが紐づけられ、イベントに対応するようになる。
クラスモジュールでは、objApp_NewWorkbookイベント(新規ブック追加時に発生するイベント)が用意されているので、新規でブックを開くとこのイベントが応答する。
イベントの内容は「ブックの名前を表示」である。
標準モジュールの「Add_Book」を実行すると、イベントを確認できる。
アプリケーションのイベントは、イベント応答タイプの変数に、Excelアプリがセットされている場合にのみ発生する。
従って今回の場合は「App_Set」を実行してから「Add_Book」を実行しないとイベントは発生しない。
また、イベント応答タイプの変数にExcelアプリケーションをセットしても、マクロのエラー等で変数が初期化されると、イベントは応答しなくなるので注意が必要である。