メニューにチェックマークを付ける


自分で作ったメニュー項目にチェックマークを付けるには、State プロパティを操作します。ここでは「メニューバーに独自のメニューを追加する」でご紹介したメニュー項目にチェックマークを付けてみます。

Sub AddMenu()
    Dim NewM As Variant, NewC As Variant
    ''新しいメニューを追加する
    Set NewM = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup)
    NewM.Caption = "新しいメニュー(&C)"
    ''オリジナルコマンドを追加する(1)
    Set NewC = NewM.Controls.Add
    With NewC
        .Caption = "保護解除(&U)"
        .OnAction = "UnProtectSheet"
        .State = False
        .BeginGroup = False
    End With
    ''オリジナルコマンドを追加する(2)
    Set NewC = NewM.Controls.Add
    With NewC
        .Caption = "参照元/先のトレース(&P)"
        .OnAction = "Precedents"
        .BeginGroup = True
        .FaceId = 450
    End With
End Sub

Sub UnProtectSheet()
    With Application.CommandBars("Worksheet Menu Bar").Controls("新しいメニュー(&C)"). _
                                                                       Controls("保護解除(&U)")
        .State = Not .State
    End With
End Sub

State プロパティに True を設定するとチェックマークがつきます。チェックマークはアイコンの位置に表示されますので、チェックマークを付けたいメニュー項目には FaceId プロパティを設定してはいけません。上記の例では、メニューを追加するとき State プロパティに False を設定しています。つまり、チェックマークの初期値は「なし」という例です。前回の状況を引き継ぐような場合は、State プロパティの値をレジストリなどに保存しておくといいでしょう。

プロシージャ UnProtectSheet では、クリックされたメニューを決め打ちしています。これでもいいのですが、クリックされたメニュー項目を自動的に取得できれば、チェックマークのオン/オフだけを独立したサブ プロシージャとして記述できます。クリックされたメニュー項目を知るテクニックは「実行されたメニューを取得する」をご覧ください。