10-1 コンテキストメニューとは
- セルや列見出し等を右クリックすると出てくるメニュー
- VBAで扱うときはCommandBarオブジェクトで表される。
- CommandBarの集合がCommandBarsコレクション
- 「切り取り」「コピー」などのコマンドはCommandBarControlオブジェクト
- Controlsコレクションで操作する
`セルを右クリックしたときに選択可能なコマンド数が表示される
MsgBox CommandBars("Cell").Controls.Count
'コンテキストメニューの4番目「形式を選択して貼付け」という文字列が表示される
MsgBox CommandBars("Cell").Controls(4).Caption
'コンテキストメニューの文字列からインデックス番号を取得する
MsgBox CommandBars("Cell").Controls("形式を選択して貼り付け(S)...").Index
10-2 コマンドを登録する
- コンテキストメニューにコマンドを追加するには、ControlsコレクションのAddメソッドを使う
Controls.Add Type, Id, Parameter, Before, Temporary
- Type 追加するコントロールの種類
- msoControlButton すぐにマクロを実行するようなコマンド
- msoControlPopup クリックするとサブメニューを表示するようなコマンド
- Id と Parameter Excelの組み込みコマンドを追加するときに使用
- Before コマンドを挿入する位置の指定
- 3 を指定すると、上から3番目にあるコマンドの直前に新しいコマンドが追加される
- 省略すると、コンテキストメニューの一番下に追加される
- Temporary コンテキストメニューでは使用しない
Sub Macro1()
'
' コンテキストメニュー最下部に「処理1」を追加する
'
With CommandBars("Cell").Controls.Add(Type:=msoControlButton)
.Caption = "処理1"
.OnAction = "myMacro"
End With
'
End Sub
Sub myMacro()
MsgBox "Hello"
End Sub
区切り線をつける
- BeginGroupプロパティ
追加する位置を指定する
- Addメソッドの引数Beforeに数値を指定する
’上から3番目に「処理4」というメニューを追加する
With CommandBars("Cell").Controls.Add(Type:=msoControlButton, before:=3)
.Caption = "処理4"
.OnAction = "myMacro"
End With
コマンドにアイコンを表示する
- FaceIdプロパティにアイコンのIDを指定する
'メニューの左端にフォルダのアイコンが追加される。
With CommandBars("Cell").Controls.Add(Type:=msoControlButton, before:=3)
.Caption = "処理4"
.OnAction = "myMacro"
.FaceId = 23
End With
コマンドにチェックマークを付ける
- StateプロパティにTrueを設定する
コマンドに説明をつける
- Tagプロパティ
10-3 コマンドを削除する
- ControlsコレクションのDeleteメソッドをつかう
'コンテキストメニューの上から2番目にあるコマンド(コピー)を削除する
CommandBars("Cell").Controls(2).Delete
コマンドの削除時には注意が必要
- 自分が追加したコマンドに限って削除するべき
- 不用意に削除しないように、tagプロパティの状態も合わせて削除を実施する
- tagプロパティがある = 自分がつくったコマンド
Resetメソッド メニューを初期化する
- 今までのコマンド試してきてメニューがぼろぼろで、戻らなかったらどうしようとか思ってた
- 自分以外の人が追加したメニューまでリセットしないように、注意して使う必要がある。