コンテキストメニューはオブジェクトを選択後右クリックすると表示されるメニューです。オブジェクトのタイプ毎に設定出来るので、オブジェクトのタイプに適したマクロやExcelの機能を素早く実行することができます。
しかし、Excel2010以降(多分Excel2007以降)コンテキストメニューがマクロで設定できるオブジェクトタイプが少なくなりました。特にShapesに対して設定出来なくなったのが筆者にとって大打撃でした。Excel2010でコンテキストメニューがマクロで設定できるオブジェクトタイプはCell、Row、Column、Plyなどです。
Excel2010ではコンテキストメニューのカスタマイズはリボンと同様にXMLファイルを編集します。
 

1.サンプル

コンテキストメニューへのコマンドボタンの作成方法は前章のコマンドメニューとほとんど同じです。 コマンドメニューが作成したコマンドバーにControを追加するのに対して、コンテキストメニューの場合Applicationの既存のコマンドバーにControlを追加します。
パラメータ、ショートカットキーの設定、FaceID、既存のコマンドボタンの設定などは前章を参照して下さい。
以下のサンプルでは、Cellのコンテキストメニューに対してボタンを追加しています。

Sub Context_Create()
    Dim myCBCtrl As CommandBarButton
 
    Set myCBCtrl = Application.CommandBars("Cell").Controls.Add(Before:=1)
    With myCBCtrl
        .Caption = "太文字(&B)"
        .FaceID = 113
        .OnAction = "Bold_Set"
    End With

    Set myCBCtrl = Application.CommandBars("Cell").Controls.Add(Before:=2)
    With myCBCtrl
        .Caption = "レ(&L)"
        .FaceID = 1087
        .OnAction = "Check_Input"
        .BeginGroup = True
    End With

    Application.CommandBars("Cell").Controls.Add Type:=msoControlButton, ID:=2640, Before:=3

    '以下ではドロップダウンリストを作成しています。
    With Application.CommandBars("Cell").Controls.Add(Type:=msoControlPopup, Before:=4)
            .Caption = "背景"
             With .Controls.Add(Type:=msoControlButton)
                .Caption = "赤"
                .FaceID = 7492
                .OnAction = "Interior_Red(&R)"
            End With
           With .Controls.Add(Type:=msoControlButton)
                .Caption = "水色"
                .FaceID = 6855
                .OnAction = "Interior_SkyBlue(&S)"
            End With
    
            With .Controls.Add(Type:=msoControlButton)
                .Caption = "黄"
                .FaceID = 7491
                .OnAction = "Interior_Yellow(&Y)"
            End With
    End With

End Sub

コンテキストメニューが残ったままにならないように、コンテキストメニューを初期状態に戻すプロシージャをWorkbookを閉じる前に必ず実行させます。コンテキストメニューの場合、既存のコンテキストメニューを削除しないようにメソッドはDeleteではなくResetを使用します。

Sub Context_Reset()
    
    Application.CommandBars("Cell").Reset

End Sub

またワークブックの各イベントに以下のような処理を追加します。

Private Sub Workbook_Open()

    Context_Create

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
   
   Context_Reset

End Sub

最終更新のRSS
Last-modified: 2014-03-11 (火) 01:58:42 (3698d)