さて、クラスモジュールについていくつか書いてきた。
「生成やら破棄やら、馴染みがないから難しそうだ」という方もいるだろう。
そこで、本邦初公開。「クラスモジュールのいいとこ取り」を指南したと思う。書籍やインターネットでも見かけたことはない。他にも実践している人はいるかもしれないが、たぶん私のオリジナルってことで。
私自身がVBAである会社の基幹システムを構築できたのは以下に紹介する手法によりモジュールを整理できたところも大きい。よって、本来は企業秘密?としたいところだが、知識は使って貰ってナンボである。よって、公開することにした。
方法は「なあんだ」というレベルのモノだと思う。が、これがコロンブスの卵。
以下のサンプルは実用的ではないが、「こういうことができるんだ」という確認には使えるだろう。
※コピーする場合、全角スペースが混じっているので半角に変換して下さい。
◆準備するモノ
・標準モジュール Module1 ModuleMain
・クラスモジュール Class1
以上、3つのモジュールである。
◆Classモジュール Class1 |
Public Function getDup(sVal As String) As String getDup = sVal & sVal End Function |
・Class1への設定(重要)
プロパティウィンドウを開いて、Instancing の値を 2 - PublicNotCreatable に変更する。
◆標準モジュール Module1 |
Public C As New Class1
|
◆標準モジュール ModuleMain |
Sub Test1() Debug.Print C.getDup("あかさたな") End Sub
|
この後、ModuleMainのTest1を実行すると、イミディエイトウインドウに「あかさたなあかさたな」と表示されるだろう。(コードを検証していないので動かない場合はご連絡願います)
上記Module1での記述のように、クラスモジュールを定義時点でNewしておけば、同一プロジェクト(つまりブック単位)からはいつでも呼び出せるようになる。つまり、標準モジュールと同様に常駐しつつも、Cという名前で生成されているので、そのCというグループ(クラス)に所属するモジュールであるとすぐに分かる。
この方法により、関数はかなり整理しやすくなるはずである。
クラスモジュールへのとっかかりとして、このあたりから始めてみればどうだろうか。
なお、これで「動作が不安定になった」「致命的な症状が起きた」ということは私のつたない経験では発生していない。
私としてはこれをマスターすることが、VBAマスターにおける一つ大きな階段を上るものだと思うので、普及させていきたいと考えている。
※書き直し /八月末削除予定 /クラス