トップ > 備忘録 > 【簡単解説】VBAクラスモジュール 2:クラスイベント

【簡単解説】VBA クラスモジュール 2クラスイベント   2021.06.29

今回は、クラスモジュールに用意されているイベントについてです。

内容

●クラスモジュールのイベント
 ・イベントの種類
 ・ポイントと使用例

サンプルファイル

記事に載せてあるコードサンプルのファイル ダウンロード


【お薦め】マクロ・プロシージャを管理する無料のツール!
 Excelマクロ管理ツール

クラスモジュールのイベント

イベントの種類

クラスモジュールにはイベントが用意されている。イベント種類は次の2つである。


Class_Initialize()はクラス作成時に呼び出され、
Class_Terminate()はクラス破棄時に呼びだされる。
お気づきの方も多いと思うが、ユーザーフォームと同様である。


イベントのポイントと使用例

前述のイベントはクラス作成時と破棄時に呼び出されるが、実際の発生タイミングを確認する。
クラスモジュールと標準モジュールにメッセージ表示するコードを記述し、メッセージボックスが表示される順番で、イベント発生タイミングを確認する。

●クラスモジュール
Private Sub Class_Initialize()
    MsgBox "イベント:Class_Initialize"
End Sub

Private Sub Class_Terminate() MsgBox "イベント:Class_Terminate" End Sub
●標準モジュール
Sub Sample1()
    Dim clsSample1 As Class1
    MsgBox "変数の型宣言"
    Set clsSample1 = New Class1
    MsgBox "インスタンスを生成"
End Sub

Sample1を実行した結果は次の通りである。



インスタンスを生成するタイミングでClass_Initializeイベントが発生している。
また標準モジュールのクラスインスタンスはプロシージャレベルだったため、プロシージャ終了時にインスタンスが破棄され、それに伴いClass_Terminateイベントが発生している。


次はクラスを、モジュールレベルで宣言したサンプルである。

●クラスモジュール
Private Sub Class_Initialize()
    MsgBox "イベント:Class_Initialize"
End Sub

Private Sub Class_Terminate() MsgBox "イベント:Class_Terminate" End Sub
●標準モジュール
'宣言セクション
Dim clsSample1 As Class1

Sub Sample2() Set clsSample1 = New Class1 MsgBox "インスタンスを生成" End Sub
Sub Sample3() Set clsSample1 = Nothing MsgBox "クラスを破棄" End Sub

Sample2を実行した結果は次の通りである。モジュールレベルの変数のため、プロシージャが終了してもClass_Terminateイベントは発生しない。



Sample2実行後に、Sample3を実行すると「イベント:Class_Terminate」→「クラスを破棄」の順番でメッセージが表示される。

またSample2実行後に再度Sample2を実行すると(変数が保持された状態で再度インスタンスを生成)
「イベント:Class_Initialize」→「イベント:Class_Terminate」→「インスタンスを生成」の順番でメッセージが表示される。


次は、モジュールレベルでNewキーワードを用いる宣言のサンプルである。

●クラスモジュール
Private Sub Class_Initialize()
    MsgBox "イベント:Class_Initialize"
End Sub

Private Sub Class_Terminate() MsgBox "イベント:Class_Terminate" End Sub
Sub Msg() MsgBox "クラスモジュール:サブルーチン" End Sub
●標準モジュール
'宣言セクション
Dim clsSample1 As New Class1

Sub Sample4() clsSample1.Msg End Sub
Sub Sample5() Set clsSample1 = Nothing MsgBox "クラスを破棄" End Sub

Sample4を実行した結果は次の通りである。



初めてクラスのサブルーチンを使用するタイミングでClass_Initializeイベントが発生していることがわかる。
Sample4を実行後に再度Sample4を実行すると「クラスモジュール:サブルーチン」のメッセージのみ表示される。



ページトップへ戻る
Copyright(C) 2009- 坂江 保 All Rights Reserved.