【VBA】クラスのプロパティを読み取り専用にするLet と Getの書き方
作成日:2022-08-31
更新日:2025-11-02

更新が
不要の場合の
対応
不要の場合の
対応
- Public Property Let で 上書き禁止の条件追加
- Private Property Let で 外からの使用禁止
外からの更新を1回だけ許可する場合

すでに値が入ってたら、上書きできないようにする
Private id_ As String
Public Property Let ID(ByVal value As String)
If not id_ = “” then
MsgBox "すでに登録済みです", vbCritical, "上書き禁止"
else
id_ = value
End if
End Property
Public Property Get ID() As String
ID = id_
End Property
IDは何度も更新するものじゃないから
外からの更新を禁止する場合

Property Let を Privateにして、クラス内のみで更新する
Private count_ As Long
Private Property Let Count(ByVal value As Long)
count_ = value
End Property
Public Property Get Count() As Long
Count = count_
End Property
たとえば、どんなときだろう
例1:Accessに接続したとき、レコードのカウントを取得する

Accessに接続するクラスの中に記述する
Public Sub OpenRS()
With RS
.Open ThisSQL, CN
If RS Is Nothing Or (.bof And .EOF) Then Call CancelDB
Count = .Fields.count '☆☆ここでフィールドのカウントを取る
End With
End Sub例2:クラス初期化のとき、今日の日付から文字列を登録する

「◯年◯月」とか、「更新日:◯月◯日」とか
Private yearmonth_ As Long
Private Sub Class_Initialize()
dim d as date: d = Now()
dim v as string: v = Year(Now) & "年" & Month(Now) & "月"
YearMonth = v '☆☆ここで文字列を作る
End Sub
Private Property Let YearMonth(ByVal value As String)
yearmonth_ = value
End Property
Public Property Get YearMonth() As String
YearMonth = yearmonth_
End Property
自動で設定できるなら、外からの更新がいらない
2022-08-31
編集後記:
この記事の内容がベストではないかもしれません。
記事一覧
-

[VBA]Make Directory MkDir 【VBA】フォルダを作る|MkDir(フォルダがすでに存在していればエラーになる) -

[VBA]ClearContentsシート初期化 【VBA】シートの初期化|ClearContentsで値のみ削除 -

VBAでテーブル設定 【VBA】Excelにテーブルを設定する -

Excelでメール作成とOutlook起動 【VBA】Excelでメール内容を作成してOutlookを起動する -

[VBA]InStr文字列確認 【VBA】指定の文字列が含まれているか & 前後の文字列を返す|InStr/InStrRev -

[VBA]openbook 【VBA】ブックを開く|OpenBook