Excel VBA ショートカットメニューにマクロ実行ボタンを作成する

スポンサーリンク

ショートカットメニューにマクロ実行ボタンを作成する方法

ワークシートのセルをマウスの右ボタンでクリックしたときに、表示されるショートカットメニューにオリジナルボタンを作成するにはオリジナルショートカットメニューを作成したいワークシートのワークシートモジュールに、セルをマウス右ボタンでクリックしたときにイベントが発生する、「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
2行目【Dim ショートカット As CommandBar】
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【プライベート】キーワードを使用した、Private Sub【プライベートサブ】プロシージャ内に記述します。
Private【プライベート】キーワードを使用するとマクロ実行ダイアログの一覧に表示されません。

実行結果



以上で、ショートカットメニューにマクロ実行ボタンを作成する方法についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告