「Excel VBAのクラス」について第11回目です。インスタンス化(New)するときに実行される「コンストラクタ」とインスタンス解放時に実行される「デストラクタ」についてです。

前回、表データのインスタンスをコレクション化しました。そのコレクションからデータを取り出す方法を勉強する前に「コンストラクタ」と「デストラクタ」というものについて学んでおきましょう (^^)

わかりました。「コンストラクタ」って初めて聞きました。
今回もよろしくお願いしますm(_ _)m
はじめに
クラスをインスタンス化(New)したときに実行されるコードを「コンストラクタ」と言います。
そして、インスタンスが破棄(Nothing)されたときに実行されるコードが「デストラクタ」です。
今回はVBAの「コンストラクタ」と「デストラクタ」について勉強していきます。
【この記事でわかることは】
・Excel VBA における「コンストラクタ」と「デストラクタ」について
VBAのコンストラクタ/デストラクタとは
VBAのコンストラクタはイベントプロシージャ Class_Initialize で定義します。ただし、VBAのコンストラクタには引数を設定することはできません。
コンストラクタの使い方
コンストラクタは、クラスのインスタンスを生成(New)するときに実行されるメソッドで、主にそのクラスのメンバ変数(クラス内の変数)を初期化するときに使用します。
コンストラクタを書く場所
VBA にはそれらに対応したイベントがあります。Class_Initialize の場所は次のとおりです。
Classモジュールのコード左上にある (General) プルダウンから [Class] を選択します。

コードの右上プルダウンで [Initialize] または [Terminate] を選択できますが、デフォルトで [Initialize] が自動的に選択されます。

選択されたプロシージャ Private Sub Class_Initialize() が自動で表示されます。
これの部分を見ただけで引数を渡せないことがわかりますね。
コンストラクタの利用法
コンストラクタでは、インスタンス化した際に発生する Class_Initialize イベントで、一般的には変数の初期化などの処理を行ったりさせます。
VBAの場合、Class_Initialize() に引数を渡すことはできない仕様になっています。
デストラクタの場合
デストラクタでは、インスタンスを開放した際に発生する Class_Terminate イベントを処理して、クラスの中で使用しているオブジェクトなどを解放したりできます。
基本的な使用例
コンストラクタとデストラクタの簡単な例が次のコードです。
※ 各コードの解説は、コード内のコメントを参照願います。
'プロパティ変数
Public OwnerName As String
Private Sub Class_Initialize()
'ここに初期設定を書く
OwnerName = "くるみこパパ" '変数に初期値代入
End Sub
Private Sub Class_Terminate()
'ここに後始末の処理を書く
MsgBox "Classのインスタンス開放"
End Sub標準モジュール側のコードです。明示的にインスタンスを Nothing で解放しています。
'標準モジュールのコード(Set ※ = Nothing あり)
Sub Class_Event_Test()
Dim c As Class1
Set c = New Class1 'Class_Initialize 発生
MsgBox c.OwnerName '変数の値を確認
Set c = Nothing 'Class_Terminate 発生
End SubNothing していないこちらのコードでも「デストラクタ」が発生します。
'標準モジュールのコード(Set ※ = Nothing 無し)
Sub Class_Event_Test2()
Dim c As Class1
Set c = New Class1 'Class_Initialize 発生
MsgBox c.OwnerName '変数の値を確認
End Sub 'ここで Class_Terminate 発生このコードでは明示的に Nothing で解放していませんが、モジュールを抜ける際に自動的にインスタンスは解放されるので「End Sub」の段階で Class_Terminate イベントが発生します。
「コンストラクタ」と「デストラクタ」の結果メッセージの画像が次のとおりです。
まとめ(おわりに)
以上、Excel VBAの「コンストラクタ」と「デストラクタ」について、それぞれの発生タイミングと簡単ですが利用例などを紹介しました。

クラスの11回目でした。
「コンストラクタ」と「デストラクタ」についてでした。VBAのコンストラクタについては、他言語のように引数を渡すことが出来ないことも覚えておいてください。

引数を渡せないから変数の初期化などの簡単な処理にしか使えないんですね。
引数が渡せるような裏技とかは無いのでしょうか(^^?

そうですね。
「コンストラクタ」に引数を渡すことはできませんが、それに代わる方法についてはいくつかあるようですので検討していきたいと思っています。引数を渡すようにできればもっと便利に使えそうですからね(^^)

わかりました。よろしくお願いしますm(_ _)m
まとめ
最後に、今回勉強した内容を整理しておきましょう。
次回は、引数を渡せないVBAのコンストラクタですが、うまく利用して代替できる案ついて検討しています。よろしければ引き続きこちらをご覧ください。
[https://www.kurumico.com/excel-vba-class12/12435/]
Excel VBA クラスについての記事一覧
-
Excel VBA関数
VBA Oct 関数 指定した数値を8進数の文字列に変換する
-
Excel VBA関数


VBA GetSetting 関数 指定のキー設定値を取得する
-
Excel VBA関数


VBA GetAllSettings関数 保存した設定を一括取得
-
Excel VBA関数


VBA IMEStatus関数 IMEの状態を示す値を取得する
-
Excel VBA関数


VBA Shell 関数 外部プログラムやコマンドを実行します
-
Excel VBA関数


VBA Environ関数 OS環境変数の値を取得します
-
Excel VBA関数


VBA 色を操るRGB関数とQBColor関数を比較してみた
-
Excel VBA関数


VBA QBColor 関数 色インデックスに対応する値を返す
-
Excel VBA関数


VBA RGB 関数 色のRGB値を示す整数(Long)を返す
-
Excel VBA関数


VBA DoEvents 関数 占領中の制御をOSに返します
-
Excel VBA関数


VBA CreateObject関数 オブジェクトへの参照を作成
-
Excel VBA関数


VBA IIf 関数 式の評価に基づいた値(式)を返します
-
Excel VBA関数


VBA Switch 関数 複雑な条件分岐をスマートに制御する
-
Excel VBA関数


VBA Choose 関数 引数のリストから選択した値を返す
-
Excel VBA関数


VBA CallByName関数 オブジェクトのプロパティやメソッドを動的に操作する
-
Excel VBA関数


VBA Tab 関数 出力を指定したタブ位置に移動します
-
Excel VBA関数


VBA Spc 関数 スペース挿入でPrint位置を調整する
-
Excel VBA関数


VBA LOF 関数 開いているファイルの長さ(Long)を返す
-
Excel VBA関数


VBA Loc 関数 開いているファイルのポインタ位置を返す
-
Excel VBA関数


VBA Input 関数 ファイルから指定数の文字列を取得する
★★★ ランキング参加中! クリックしてね(^^)/ ★★★
過去記事のサンプルファイルをダウンロードできます
この記事のサンプル登録はありません。記事内のコードをご利用ください。
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください











