Digital_Neko

フリーランスプログラマー

Excel VBA デストラクタ

今回はデストラクタについて説明していきます。デストラクタは、オブジェクトのインスタンスへの参照がメモリからすべて削除されるか、オブジェクトへの最後の参照がスコープ外になったときに発生します。構文は下記のようになります。

Private Sub object_Terminate( )

まずは実際に動作させるとわかり易いので、サンプルプログラム図1、図2を用意しました。

図1クラスモジュール
図2標準モジュール

図1のクラスモジュール(モジュール名Class)のPrivate Sub Class_Terminate の記述がデストラクタになります。またクラスモジュールのコンストラクタ Class_Initialize() でSheet1を設定しています。(実行する前にあらかじめSheet2を作成しておいてください)

図2の標準モジュールをステップ実行すると、最初にインスタンスWSを生成した後、コンストラクタでSheet1を設定します。次に WS.myWs.cells(1 , 1).Value = “東京” でSheet1の1行1列に「東京」という文字列を代入します。次が肝心なのですが、

Set WS = Nothing

でインスタンスへの参照を削除します。こうすることでデストラクタによって、サンプルプログラムでは、Sheet2の1行1列に「東京」という文字を代入しています。

そして最後にメッセージボックスでSheet2の1行1列の内容を表示しています。

またオブジェクトへの最後の参照がスコープ外になった時を実感するには Set WS = Nothing をコメントアウトしてみてください(あらかじめSheet2の1行1列の値を消してください)。そうすると、メッセージボックスには何も表示されず、最後に「東京」がSheet2の1行1列に代入されます。

このようにデストラクタを用いることで、インスタンスへの参照が削除された時にイベントを発生させる事ができます。

今回の記事が皆様の参考になれば幸いです。