クラスモジュール
VBA ではクラスを自作することもできます。
クラスとはオブジェクトの備えるべきプロパティやメソッドを定義する設計図です。自作クラスのプロパティやメソッドは、クラスモジュール の中に記述します。
クラスモジュールを挿入します
VBE を起動して、[挿入]、[クラスモジュール] の順に選択すると、プロジェクトエクスプローラーに新しいクラスモジュールが追加されます。今回初めてクラスモジュールを挿入したのであれば、オブジェクト名はデフォルトで "Class1" となっているはずです。
こんな名前のままでは、生成されるオブジェクトの性質がさっぱりわからないので、[Class1] を選択して、プロパティウィンドウの (オブジェクト名) の欄で名前を設定しておきます。今回は Staff という名前をつけておきます。
クラスを定義します
それでは、コードウィンドウに Staff クラスのオブジェクトの定義 (設計図) を書き込んでみましょう。
'VBA Class Module sample_code_1-1
Option Explicit
'氏名プロパティ
Public Name As String
'年齢プロパティ
Public Age As Long
'部署プロパティ
Public Department As String
'社員情報を表示するメソッド
Public Sub Info()
MsgBox "氏名:" & Name & vbCrLf & _
"年齢:" & Age & vbCrLf & _
"部署:" & Department
End Sub
プロパティは次の構文で定義します。
Staff クラスのオブジェクトは氏名、年齢、部署という 3 種類のプロパティを備えています。
メソッドは以下の構文で定義します。
処理
End Sub
Staff クラスのオブジェクトは社員の氏名、年齢、部署をまとめてメッセージボックスで表示する Info メソッドを備えています。
こんなふうに自分でクラスを設計してみると、これまで曖昧だった VBA の構造について、かなり見通しがよくなります。プロパティはオブジェクト固有の変数、メソッドはオブジェクト固有の関数 (Sub プロシージャ) なのです。
オブジェクトを作成します
クラスからオブジェクトを生成することを クラスのインスタンス化 といいます。
Subプロシージャの中で Staff クラスをインスタンス化してみましょう。
'VBA Class Module sample_code_1-2
Sub Test_Staff()
'変数をStaff型で宣言
Dim mystaff As Staff
'Staffオブジェクトを作成して変数に格納
Set mystaff = New Staff
'プロパティに値を格納
mystaff.Name = "城戸涼音"
mystaff.Age = "28"
mystaff.Department = "経理"
'Nameプロパティの値を表示
Debug.Print mystaff.Name
'Infoメソッドで社員情報を表示
mystaff.Info
End Sub
自作クラスのオブジェクトを格納する変数を宣言するときは、
と記述します。自作クラスのインスタンス化は New キーワードで実行します。
オブジェクトを変数に入れるときは、Set ステートメントを添えることを忘れないでください。
オブジェクトのプロパティの値は
で参照できますが、オブジェクトを作成した段階では、プロパティには何の値も設定されていません。必要であれば、
という構文でプロパティに値を代入します。上のコードにあるように、
と記述すれば、Nameプロパティに "城戸涼音" という文字列データが格納されます。