Property プロシージャ
Property プロシージャは、変数やクラスのプロパティ(オブジェクトを含む)に対して、値の設定や取得を行います。通常、Property Get ステートメント と Property Let ステートメント または、Property Get ステートメント と Property Set ステートメント をペアで定義します。
Property Let ステートメント
Property Let ステートメントは、変数やクラスのプロパティ(オブジェクト以外)に値を設定します。値の取得には、Property Get ステートメントを使用します。
[ access_level ] [ Static ] Property Let name ( [ arglist,] value )
[ statements ]
[ Exit Property ]
[ statements ]
End Property
項目の説明
- access_level ・・・ プロシージャを利用できる範囲を指定します。Public・Private・Friend の3種類があります。省略するとPublic を指定した場合と同じになります。
- name ・・・ 定義する Property Let プロシージャの名前を指定します。同じ Class モジュール内で、ペアとなる Property Get プロシージャの名前と同じにします。
- arglist ・・・ Property Let プロシージャが呼び出される時(value:値 が設定される時)に、Property Let プロシージャに渡される引数を表す変数のリストを指定します。複数の変数を指定する場合はカンマ(,)で区切ります。この時、対応する Property Get プロシージャにも、同じ名前と数の arglist を指定しなければなりません。arglist は省略可能です。
※ Property Let ステートメント の引数は、arglist と value になり、value は省略することができないので、対応する Property Get ステートメント よりも引数が常に 1 つ多くなります。 - value ・・・ プロパティに設定する値を格納する変数を指定します。(必ず指定します。)
- statements ・・・ 実行される一連のステートメントを指定します。
access_level(Public・Private・Friend) の詳細:
Public:すべてのモジュールのすべてのプロシージャから使用することができます。
Private:同一モジュール内からのみ使用可能です。
Friend:プロジェクト内からは呼び出せますが、オブジェクトのインスタンスのコントローラからは呼び出せません。キーワード Friend は、フォームモジュールおよびクラスモジュールでのみ記述可能です。
Static
プロシージャ内のローカル変数が、次に呼び出されるまでその値を保持します。(省略可)
Exit Property ステートメント:
Property プロシージャを直ちに終了します。Exit Property ステートメントは、Property プロシージャ内の任意の場所で必要に応じていくつでも指定できます。
Property Let ステートメント 使用例
サンプルVBAソース その1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Private p_num As Double 'Property Let ステートメント Property Let Number(Optional flg As Boolean = True, num) '引数:flg が、False の場合、p_num を 0 If flg = False Then p_num = 0 End If 'num が数値の場合、p_num にその値を加算 If IsNumeric(num) Then p_num = p_num + num End If End Property 'Property Get ステートメント Property Get Number(Optional flg As Boolean = True) Number = p_num End Property Sub Sample01_Property_Let() Number = 100 Debug.Print Number Number = "abc" Debug.Print Number Number = 50.25 Debug.Print Number Number = -200 Debug.Print Number Number(False) = 0 Debug.Print Number(False) End Sub |
実行結果
サンプルVBAソース その2(クラス)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Private p_Name As String Private p_Age As Long 'Property Let ステートメント Public Property Let Name(str As String) p_Name = str End Property 'Property Get ステートメント Public Property Get Name() As String Name = p_Name End Property 'Property Let ステートメント Property Let Age(num As Long) p_Age = num End Property 'Property Get ステートメント Property Get Age() As Long Age = p_Age End Property |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub Sample02_Property_Let() Dim cc As New Class1 cc.Name = "山田太郎" cc.Age = 20 MsgBox cc.Name & " " & cc.Age Set cc = Nothing End Sub |