クラスモジュールは生成しないと使えない。



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では必ずしもそうでない場合がある。

ここで注意点がある。

コピーを作り、使い終わったら捨てる必要がある。さもなくばコピーだらけになってしまうし、次に使おうとした際に使えない場合もある。作法として「使い終わったら破棄する」は覚えておこう。






関連ページ このページより詳細なモジュールの説明あり
ブログトップへ
ブログ内検索キーワード
 クラス モジュール