[VBA]コントロールの活性・非活性処理の共通化

やりたいこと

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