すっかり寒くなってまいりました。
窓の外では雪が降ってきました。
最近は少しバタバタしてまして、ブログ更新の優先度が若干下がってます;
あと一ヶ月はこんな感じですが・・すみません。
まぁ忙しいというのはいいことですな。
先日、クラスモジュールで構造体を実装するために
セッターとかゲッターを作って云々というお話をしました。
が!
なんかね、プロパティを用いる同様の設定方法が既にあったみたいです。
マクロさんは凄いですな。
まぁ早速、記述例を用いて解説していきましょう。
以下のマクロは、「クラスモジュール」に記述します。
Private m_testStr As String
Private m_testInt As Integer
↑まずはクラスの先頭で、必要な変数を一気に指定してしまいます。
全て「Private」で構いません。
マクロの慣習でしょうかね、
この時の変数名は「 m_変数名 」と、頭に「 m_ 」をつけるらしいです。
では次。
Property Get testStr() As String
testStr = m_testStr
End Property
Property Let testStr(ByVal inputValue As String)
m_testStr = inputValue
End Property
↑「 inputValue 」は好きな変数名で構いませんよ。
このようにゲッターとセッターを記述・・セッター!?
あれ?これはセッターというか、レッター・・と言うのでしょうか?
いえいえ、これもセッターなのですが、
一旦「 Let 」についてご説明しましょう。
以下のマクロを見てください。
-----------------------------------------------------------------------
Dim myRng As Range
Dim valInt As Integer
Dim valStr As String
Set myRng = ThisWorkBook.workSheet(・・以下省略)
Let valInt = 0
Let valStr = ""
本来、文字列とか数値の代入文には「 Set 」でなく「 Let 」を用います。
記述しなければデフォルトで「 Let 」が適用されるので、まず省略されています。
「 Set 」はオブジェクト型の代入文で用いられ、こちらは省略できません。
代入文は省略すればいいのですが、今回用いるプロパティ命令では「 Let 」の省略が
認められていなかったんですね。
-----------------------------------------------------------------------
話を戻します。
Private m_testStr As String
Private m_testInt As Integer
Property Get testStr() As String
testStr = m_testStr
End Property
Property Let testStr(ByVal inputValue As String)
m_testStr = inputValue
End Property
↑「 Let 」はいいですね?
もし変数が「 Range 」や「 WorkSheet 」なら・・
そう、「 Let 」を「 Set 」に変更すればよいのです。
なお、ゲッターとセッターは両方記述する必要はありません。
セットする必要がなければゲッターだけ記述すれば結構です。
このように変数ごとにゲッター/セッターを記述していきます。
標準モジュール内で使用すると↓のようになります。
「 Get 」も「 Let 」も「 Set 」も「 m_ 」も表示されず、変数名がそのまま表示されます。
ユーザー定義型を使用するときは、このように記述したほうがよかったですね。
という訳で、追記という名前の訂正事項でした。