少ないコード量で、実務でも使えるかもしれないと感じていただくためにイベント処理を共通化するクラスの簡単なサンプルと、プロパティをPropertyプロシージャで実装する例をご紹介しました。
クラスモジュールを少し勉強したけれど挫折した経験のある方には、拙著『いちばんやさしいExcel VBAの教本』でも多用しているステップ実行を行って、Propertyプロシージャが、どう呼び出されているのか実感することをおすすめします。
DataValidationクラスの挙動をステップ実行で確認する手順
AUTO_OPEN Subプロシージャをいきなりステップ実行してもいいのですが、せっかくですから、ブックを開いたときにステップ実行できるようにしてみましょう。
まず、AUTO_OPENマクロの先頭にStopステートメントを追加します。
Stopステートメントを追加したら上書き保存して、DataValidationクラスを含むブックを一旦閉じてから再度開きます。
すると下図のように、先ほど追加したStopの行で中断した状態になります。
ここからステップ実行を行うショートカットキー[F8]を使って、各ステートメントが実行されたときに何が起きているのかを、意識しながら1行1行ステップ実行しましょう。
Propertyプロシージャを使ってTargetSheetプロパティを実装しているので、
Set HandlSheet1.TargetSheet = VBAProject.Sheet1
が実行されると、クラスモジュール側の、
Property Set TargetSheet(ByVal sh As Excel.Worksheet)
に処理が移り、
End Property
の実行後に、AUTO_OPENマクロ側に戻ってきます。
この様子を、
「こんな風に実行される行が移っていくのだなぁ」
などと思いながら、まずは味わいましょう。
TargetSheetプロパティがどう変化するのかを確認するのは、このPropertyプロシージャがどう呼び出されるのかをしっかり実感してからです。
ちなみにTargetSheetプロパティをPublicで宣言したグローバル変数で実装した場合は、ステップ実行だけではそれほど面白みはありません。
ステップ実行しても何をやってるかわからない場合
もしもここで、何をやっているのかまったくわからないようならば、クラスモジュールに手を出すのは、さすがに早すぎます。
「オブジェクト指向でつまづく7つのポイントと処方箋」には、クラスモジュールを使用するにはプロシージャの分割やモジュールレベル変数、プロシージャ間の値の引き渡し等の前提知識が必要となる。それらの知識が無い場合はまずそこから学習が必要である。
と書かれています。私も同感です。
まずは、同じモジュール内に存在する、引数を必要としない別のSubプロシージャをCallステートメントで呼ぶ例をステップ実行してみましょう。
つづいて、同じモジュール内に存在するFunctionプロシージャを呼ぶ例などをステップ実行です。
以上のような同じモジュール内の別プロシージャを呼ぶ挙動を確認できたら、別のモジュールに存在するSubプロシージャ・Functionプロシージャを呼ぶ例をステップ実行してみましょう。
最終更新日時:2019-02-20 16:13
Home » エクセルマクロ・Excel VBAの使い方 » クラスを作ったらステップ実行してみましょう