EXCEL VBAメモ - クラスの定義と使用
メンバ変数へのアクセスはプロパティで行う。コンストラクタの引数でメンバ変数へ値を設定することはできない。検索すると裏技で対応方法がいろいろ公開されているが、後々意味が分からなくなりそうなので使用せずプロパティで行うこと。
引数の無いプロシージャはカッコ不要。
引数はByValを使用する?
クラスの定義
クラスモジュールに作成する。
Option Explicit ' メンバ変数 Private mVal As Long ' コンストラクタ Private Sub Class_Initialize() MsgBox "コンストラクタが実行されました。" End Sub ' デストラクタ Private Sub Class_Terminate() MsgBox "デストラクタが実行されました。" End Sub ' プロパティ(Getter) Public Property Get Val() As Long Val = mVal End Property ' プロパティ(Setter) Public Property Let Val(ByVal newVal As Long) mVal = newVal End Property Public Sub Inc() mVal = mVal + 1 End Sub Public Sub Add(ByVal addVal As Long) mVal = mVal + addVal End Sub Public Function Equal(ByVal eqVal As Long) As Boolean If mVal = eqVal Then Equal = True Else Equal = False End If End Function
呼び出し側
Sub foo() Dim a As MyClass Set a = New MyClass ' コンストラクタ実行 a.Val = 100 ' 引数の形でなく、代入で値を設定する。 MsgBox a.Val '=> 100 a.Inc ' カッコを付けない MsgBox a.Val '=> 101 a.Add (10) MsgBox a.Val ' => 111 MsgBox a.Equal(111) '=> True Set a = Nothing ' デストラクタ実行 End Sub