やりたいこと
vbaのフォームでは各オブジェクトごとに活性、非活性を切り替えることができる。
例えばチェックボックスはLocked = Trueにしただけでは外見の変化がなく分かりづらいので、Enabled = Falseにしてあげたい。
一方でテキストボックスはEnabled = Falseにすると中身の値をコピーすることができない点が不便であるため、Locked = Trueにしたい。
また、テキストボックスは非活性にしても背景がグレーになってくれない。
各オブジェクトごと、非活性にするためにどういった処理が必要であるかを意識するのが手間であるため、共通メソッドとしてまとめる。
ソースコード
Public Sub Activate(obj As MSForms.Control, flag As Boolean)
If (flag) Then
Select Case TypeName(obj)
Case "CheckBox"
obj.Enabled = True
Case "TextBox"
obj.Locked = False
obj.BackColor = RGB(255, 255, 255)
Case "CommandButton"
obj.Enabled = True
End Select
Else
Select Case TypeName(obj)
Case "CheckBox"
obj.Enabled = False
Case "TextBox"
obj.Locked = True
obj.BackColor = RGB(122, 122, 122)
Case "CommandButton"
obj.Enabled = False
End Select
End If
End Sub