ブログを分析すると、とてもアクセス数の多いページテーマがある。

 ・データベースアクセス(ExcelをDBとして扱うのは特にアクセスが多い)

 ・ネットワーク(やっぱり連携は一つの壁なのだろうか?)

 ・クラスモジュール(検索キーワードに「クラスモジュール VBA」と指定する人も結構多い)

分かってしまえば大したことではないのだが、確かにインターネットや書籍でもこのあたりの情報で関しては「これだ!」というものが極めて少ない。アクセス数もそれを如実に反映しているのだろう。

もちろん、このブログで答えが見つかっているのか、は謎である・・。


で、他の解析結果も踏まえて、「希望者がいれば講習会を開いてみようか」と思っている。


まずはどんな講習のテーマなら受講したいかのアンケートに御協力いただきたいと存じます。

記事URLでも、テーマでも、記事になくとも「わしはこんな事を知りたいんじゃ!」など、自分が受けるならこういうのがいいんだ、という注文をわがまま放題付けてください。

ご希望に添いかねる場合もありますが、本当のところのニーズを知りたいのです。


上記、興味や意見がありましたらブログの冒頭にありますメールアドレス、メッセージ、またはこの記事へのコメント(無記名でいいですよ)ご連絡願います。締め切りは2月中くらいで

なお、アンケートに答えたからといって、参加を強制するものではありません。だって、北海道から沖縄まで、参照いただいているんですもの。


以上、よろしくお願い申し上げます。

最も馴染みやすいクラスモジュールの使い方で、クラスモジュールには少しは馴染んでいただけたかと思う。が、私が実務で使うに当たってはもう少し工夫をした。


以下に構造を示すサンプルコードを書く。が、エラーも含め、簡素化してあるのでその辺はご容赦願いたい。

表記上全角スペースを使っている部分があるが、コピーした際には半角にするか削るかしていただきたいなど、注意点は前回通りだ。


◆Classモジュール ClassString
Public Function getDup(sVal As String) As String
  getDup = sVal & sVal
End Function

◆Classモジュール ClassNum

Public Function getHalf(iVal As Integer) As Integer

  getHalf = iVal / 2
End Function


◆Classモジュール ClassCom
Public STR As New ClassString
Public NM As New ClassNum

◆標準モジュール ModuleDef
Public C As New ClassCom

◆標準モジュール Module1
Sub Test02()
  Debug.Print C.STR.getDup("はい")
  Debug.Print C.NM.getHalf(24)
End Sub


というように、Classを入れ子構造にできるのだ。


これにより、C.と入力しただけで候補がわさわさと出てくるので、分かりやすい名前にしてさえいればもの凄く使い勝手は良くなるのだ。


なんかこれで私のオリジナルノウハウの多くを放出したような気もするが、誰かの役に立てば幸いである。


※2008/11/26 間違い修正



※書き直し /八月末削除予定 /クラス

さて、クラスモジュールについていくつか書いてきた。

生成やら破棄やら、馴染みがないから難しそうだ」という方もいるだろう。


そこで、本邦初公開。「クラスモジュールのいいとこ取りを指南したと思う。書籍やインターネットでも見かけたことはない。他にも実践している人はいるかもしれないが、たぶん私のオリジナルってことで。

私自身が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マスターにおける一つ大きな階段を上るものだと思うので、普及させていきたいと考えている。



※書き直し /八月末削除予定 /クラス