Excel VBAスタンダード 公式テキスト 10章 メニューの操作
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メソッド メニューを初期化する
- 今までのコマンド試してきてメニューがぼろぼろで、戻らなかったらどうしようとか思ってた
- 自分以外の人が追加したメニューまでリセットしないように、注意して使う必要がある。