クラスモジュールは生成しないと使えない。
Classモジュール Class1 を標準モジュール内から呼び出すときのサンプルを以下に記す。
なお、Class1の内容は http://ameblo.jp/tech-note/entry-10066633757.html の中のモノを・・。
標準モジュール Module1 では
Sub Sample()
Dim C As Class1 '宣言する
Dim iVal As Integer
set C = New Class1 '生成する
iVal = C.getData(100) '使う
'(以下ほとんど略)
set C = Nothing '破棄する
End Sub
私は元がCOBOLユーザーなので「なんでわざわざ生成やら破棄が居るの?」と思っていたことがある。多くの方もそういう疑問があるのではないだろうか。
実は、こんな書き方もできる
Sub Sample()
Dim C1 As Class1 '宣言する
Dim C2 As Class1 '宣言する
Dim C3 As Class1 '宣言する
Dim C4 As Class1 '宣言する
set C1 = New Class1 '生成する
set C2 = New Class1 '生成する
set C3 = New Class1 '生成する
set C4 = New Class1 '生成する
'(以下ほとんど略)
End Sub
この場合、C1~4の4つのクラスのコピーが作られる。
コピー機で紙が4枚になると考えて頂くとイメージしやすいだろう。それぞれの紙個別に適当な落書きをした場合、当然その落書きが別の紙の落書きに影響を与えない。独立したモノだから当たり前である。
クラスモジュールのC1~4もコピーの落書きと同じように、独立したものになる。
実際に「ああ、便利」と感じたのはデータベース接続処理をClassモジュール化したときである。
条件を元に複数のテーブルにアクセスする場合、接続内容や読み込んだデータを保持しておきたいとき、このコピー技を使って対応した。ちなみに、このようなコピーをインスタンスという。
標準モジュールでこれと同じようにするには、似たようなファンクション名でそっくりな内容を作成する、というようにせざるを得ない(まあ、代替手段を取ることの方が多いかも知れませんが・・)。
このように、処理のコピーが作成でき、それぞれを別々に利用することができる。
それにより、何カ所で同じクラスモジュールが使われていたとしても、他で生成したクラスモジュールからは独立しており、お互いに干渉しないし影響し合わない、ということになる。
※VBAの場合。例えばJavaでは必ずしもそうでない場合がある。
ここで注意点がある。
コピーを作り、使い終わったら捨てる必要がある。さもなくばコピーだらけになってしまうし、次に使おうとした際に使えない場合もある。作法として「使い終わったら破棄する」は覚えておこう。
関連ページ このページより詳細なモジュールの説明あり
ブログトップへ
ブログ内検索キーワード
クラス モジュール