コンテキストメニューはオブジェクトを選択後右クリックすると表示されるメニューです。オブジェクトのタイプ毎に設定出来るので、オブジェクトのタイプに適したマクロやExcelの機能を素早く実行することができます。
しかし、Excel2010以降(多分Excel2007以降)コンテキストメニューがマクロで設定できるオブジェクトタイプが少なくなりました。特にShapesに対して設定出来なくなったのが筆者にとって大打撃でした。Excel2010でコンテキストメニューがマクロで設定できるオブジェクトタイプはCell、Row、Column、Plyなどです。 Excel2010ではコンテキストメニューのカスタマイズはリボンと同様にXMLファイルを編集します。 1.サンプル †コンテキストメニューへのコマンドボタンの作成方法は前章のコマンドメニューとほとんど同じです。
コマンドメニューが作成したコマンドバーにControを追加するのに対して、コンテキストメニューの場合Applicationの既存のコマンドバーにControlを追加します。 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 ![]() ![]() Last-modified: 2014-03-11 (火) 01:58:42 (4031d)
|