理工系研究者のための Mac OS X, Windows, Linux メモ
 

VBA(共通)


プロパティとは

プロパティはクラスから生成されたオブジェクトの属性を表し、オブジェクトの状態や値を保持しています。 より正確にいえば、プロパティはオブジェクトの状態にアクセスするためのAPIです。 メンバ変数をPublicにしてしまえば、一見プロパティのように扱えますが、プロパティの変化にたいおうして他の状態を変化させたり、プロパティに設定しようとしている値が有効かどうかを事前に判定することができません。 プロパティとはその値の設定に伴った副作用までも制御できる機構です。

プロパティは次のように作成します。

'=[AnimalCls]============================

Private thisName As String

'値を書き込む時に呼び出される 
Public Property Let name(ByVal str As String)
  thisName = str
End Property

'値を読み込む時に呼び出される
Public Property Get name() As String
  name = thisName
End Property
下記のプログラムでは、AnimalClsというクラスからcatというオブジェクトを作成し、nameというプロパティにそのオブジェクトの名前を代入します。
'名前の設定
Dim cat As AnimalCls
cat.name = "たま"

'名前を読み込む
Dim hisName As String
hisName = cat.name
MsgBox "動物の名前は" & hisName & "です。"

クラスのメンバーやメソッドに他のクラスのオブジェクトを指定する方法

作成日:2011/1/13

ここでの説明を理解するにはあらかじめプロパティについて理解しておく必要があるので、プロパティがわからない場合は一つ前の節を読んでください。

VBAでは、オブジェクトをクラスのメンバーにしようとするとエラーが出ます。例えば、

 [AnimalCls]
 Dim mike As CatCls

 [CatCls]
 Public name As String
は不可。

この場合は、オブジェクトをクラスのプロパティにすればよい。

 [AnimalCls]
 Private myCat As New CatCls
 
 Public Property Set cat(ByVal obj As CatCls)
   Set myCat = obj
 End Property
 
 Public Property Get cat() As CatCls
   Set cat = myCat
 End Property

 [CatCls]
 Private thisName As String
 
 Public Property Let name(ByVal str As String)
   thisName = str
 End Property
 
 Public Property Get name() As String
   name = thisName
 End Property

C++では、メンバー変数の値を取り出したり、値を設定するためにはメソッドを使う必要があるため cat->getName()とか、cat->setName()のようにせざるを得ないが、VBAでは、プロパティがオブジェクトに付属する変数のように見えるようにできます。

メンバ変数をPublicで定義すれば、直接メンバ変数にアクセスできて且つプロパティのように見せかけることが出来るが、あまり推奨されないらしい。