作成日 2004/11/3
最終更新日 2005/10/22
スケルトンコードの説明
えーと、クラスモジュールを作成して、プログラムを組みます。
初め、だるまは一からプログラムを作ったけど、それば面倒くさい。
なので、だるまが作ったクラス「clsSkeleton」に手を加えるかたちでクラスを作る事にします。
ここでは、その「clsSkeleton」クラスの説明をする。
とりあえず、ここ(ver1.1)をクリックして、ダウンロードして。
確か、やりたい事は、複数のオブジェクトをまとめて扱いたいという事だった。
clsSkeletonクラスのソースを見ながら、下の文章を読んでほしい。
- まず、クラスモジュールの先頭で、貼付けるオブジェクト(まとめて扱いたいオブジェクト)を宣言する。
※宣言するとき、WithEventsを指定すると配列に出来なくなるので注意。かといって、WithEventsを指定しないと貼付けたオブジェクトの
イベントプロシージャが作成できなくなる。
- 次に、Addメソッドをいじくる。
Addメソッドの中で、引数ContainerClassObjectにフレームクラスのオブジェクトthisControlを貼付けているコードがあ
ると思う。
まとめて扱いたいオブジェクトは、下の図の様にthisControl(フレームクラスのオブジェクト)に貼付ける。
Addメソッドの引数で渡されたContainerClassObjectに直接貼付けない。
|
オブジェクトの貼付け方
一旦、コンテナオブジェクトにフレームを貼付け、そのフレームに
まとめて扱いたいオブジェクトを貼付ける
|
理由1:例えば、コントロールの位置が変わったときのプログラムが楽にできる。
理由2:オブジェクトの削除処理が楽になる。
理由3:他にも、だるまが知らない何かがあるかも。
欠点1:透明なコントロールを作成できなくなる。
欠点2:遅くなる。(オブジェクトの数が増えるから当たり前。)
Deleteメソッドをいじくる。
実際に、clsSkeletonクラスのソースを見ながら読んでくれ。
まず、thisControlに貼付けたオブジェクトを削除する。
そして、thisControlも削除する。
その他の変数も削除、あるいは初期化する。
モジュールレベルの変数をPublicで宣言する方法は簡単だけど、出来る事が限られる。
なので、基本的には、Property Let(or Set)プロシージャとProperty Getプロシージャを使う。
以下の事は、Property ...プロシージャを使わないと出来ない。
- あるプロパティの値が変更されたときに、何か処理をする
(例えば、画面に表示されているインスタンスの色を変える。他のプロパティを変更する。)
- プロパティの値が設定されるときにエラー処理をする。
- プロパティを読み取り専用にする。
- 最初の一回だけ設定可能。
UserForm1のソースを見てほしい。
- Userform1のモジュールの先頭でclsSkeletonクラス型の変数を宣言。
- UserFormのInitializeイベントで、クラスのインスタンス生成、Addメソッドの呼び出しをする。
- 適当に使う。
- UserFormのTerminateイベントで、インスタンス削除。
(注意:やらないとExcelが強制終了する可能性あり。)
Addメソッドの引数に不正な値(例:Width=-10)を入れたとき、メソッドが失敗するが、このとき、コンテナオブジェクトに
thisControlが残ったままになってしまう。しかも消せない。(ver1.0、2004/11/5)(ver1.1で修正しました。
2004/11/6)
このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方は
メールをお願いします。
Microsoft 、Windows 、Visual Basic および Excel
は米国Microsoft
Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。
このホームページの作成者はこれらの会社とはいっさい関係がありません。