ショートカットメニューにマクロ実行ボタンを作成する方法
ワークシートのセルをマウスの右ボタンでクリックしたときに、表示されるショートカットメニューにオリジナルボタンを作成するにはオリジナルショートカットメニューを作成したいワークシートのワークシートモジュールに、セルをマウス右ボタンでクリックしたときにイベントが発生する、「BeforeRigthClick【ビフォアライトクリック】」イベントプロシージャ内にコードを記述します。
作成した「ショートカットメニュー」をクリックしたときに、実行する「マクロ」は「標準モジュール」のPrivate Sub【プライベイトサブ】プロシージャーにコードを記述します。
ショートカットメニューを作成するには、コマンドバーを表す、CommandBars【コマンドバーズ】コレクションのAdd【アド】メソッドで引数Position【ポジション】にショートカットメニューを表すmsoBarPopup【エムエスオーバーポップアップ】を設定してショートカットメニューを追加します。
追加したショートカットメニュー(CommandBar【コマンドバー】オブジェクト)をControls【コントローズ】プロパティで参照してCommandBarControls【コマンドバーコントロールズ】オブジェクトの
Add【アド】メソッドで引数Type【タイプ】を省略して、「サブメニューを持たないボタン」の
CommandBarButton【コマンドバーボタン】オブジェクトを追加します。
ショートカットメニューにマクロ実行ボタンを表示するコードと解説
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim ショートカット As CommandBar Dim コントロール As CommandBarButton Set ショートカット = Application.CommandBars.Add _ (Name:="ショートカットメニュー", Position:=msoBarPopup) Set コントロール = ショートカット.Controls.Add With コントロール .Caption = "マクロ実行" .OnAction = "メッセージ1" End With With ショートカット .ShowPopup .Delete End With Cancel = True End Sub
CommandBars【コマンドバーズ】コレクションのAdd【アド】メソッドで作成するコマンドバーを表すCommandBar【コマンドバー】オブジェクトを格納する変数「ショートカット」をオブジェクト型(CommandBar)で宣言します。
3行目【Dim コントロール As CommandBarButton】
作成されたCommandBar【コマンドバー】オブジェクトをControls【コントロールズ】プロパティで参照してCommandBarControls【コマンドバーコントロールズ】コレクションのAdd【アド】メソッドで追加したコントロールを格納する変数「コントロール」をオブジェクト型(Commandbutton)で宣言します。
4行目~5行目【Set ショートカット = Application.CommandBars.Add _
(Name:=”ショートカットメニュー”, Position:=msoBarPopup)】
Applicatio【アプリケーション】オブジェクトのCommandBars【コマンドバーズ】コレクションのAddメソッドを使用して「コマンドバー」を追加して、オブジェクト変数の「ショートカット」に代入します。引数Position【ポジション】にショートカットメニューを表すmsoBarPopup【エムエスオーバーポップアップ】を設定します。
6行目【Set コントロール = ショートカット.Controls.Add 】
4~5行目で追加した「コマンドバー」(CommandBarオブジェクト)をControls【コントロールズ】プロパティで参照してCommandBarControls【コマンドバーコントロールズ】コレクションのAdd【アド】メソッドを使用して「コマンドバー」に「コントロール」(CommandBarButtonオブジェクト)を追加して、オブジェクト変数「コントロール」に代入します。「サブメニューを持たないボタンコントロール」を追加するので引数Type【タイプ】は省略します。
7行目【With コントロール】
コマンドバーのコントロールを表すCommandBarButton【コマンドバーボタン】オブジェクトが格納されている変数「コントロール」をWith【ウィズ】ステートメントで指定します。
8行目【.Caption = “マクロ実行”】
CommandBarButton【コマンドバーボタン】オブジェクトのCaption【キャプション】プロパティを使用して、コントロールに表示する文字列を設定します。
9行目【.OnAction = “メッセージ1″】
CommandBarButton【コマンドバーボタン】オブジェクトのOnAction【オンアクション】メソッドを使用して、コントロールを押したときに実行するマクロ名を文字列で指定します。
11行目【With ショートカット】
「ショートカットメニュー」を表すCommandBarPopup【コマンドバーポップアップ】オブジェクトが格納されている変数「ショートカット」をWith【ウィズ】ステートメントで指定します。
12行目【.ShowPopup】
CommandBar【コマンドバー】オブジェクトのShowPopup【ショウポップアップ】メソッドを使用して「ショートメニュー」を表すCommandBar【コマンドバー】オブジェクトを表示します。
13行目【.Delete】
CommandBar【コマンドバー】オブジェクトのDelete【デリイト】メソッドを使用して表示したCommandBar【コマンドバー】オブジェクトを削除します。ここで、CommandBar【コマンドバー】オブジェクトを削除しないと次に、BeforeRightClick【ビフォアライトクリック】イベント(セルをマウス右ボタンでクリックしたとき)が発生したとき、既にあるCommandBar【コマンドバー】オブジェクトをAdd【アド】メソッドで作成してしまうのでエラーになります。
15行目【Cancel = True】
BeforeRightClick【ビフォアライトクリック】イベント(セルをマウス右ボタンでクリックしたとき)をCancel【キャンセル】にTrueを設定することで、イベント処理を中止します。
この処理がない場合は、「オリジナルショートカットメニュー」が表示したあとに「標準のショートカットメニュー」が表示されます。
実行するマクロのコードと解説
Private Sub メッセージ1() MsgBox "ショートカットボタンがクリックされました。" End Sub
Private【プライベート】キーワードを使用するとマクロ実行ダイアログの一覧に表示されません。
実行結果
以上で、ショートカットメニューにマクロ実行ボタンを作成する方法についての解説を終了します。ありがとうございました。