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

スポンサーリンク

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

ワークシートのセルをマウスの右ボタンでクリックしたときに表示されるショートカットメニューにオリジナルボタンを作成するには、オリジナルショートカットメニューを作成したいワークシートのワークシートモジュールに、セルをマウス右ボタンでクリックしたときにイベントが発生する、「BeforeRigthClick【ビフォアライトクリック】」イベントプロシージャ内にコードを記述します。


作成した「ショートカットメニュー」をクリックしたときに実行する「マクロ」は「標準モジュール」のPrivate Sub【プライベイトサブ】プロシージャーにコードを記述します。


作成したマクロを実行するために「ショートカット」の「サブメニュー」にマクロ実行ボタンを作成するには、CommandBars【コマンドバーズ】コレクションのAdd【アド】メソッドを使用し、引数Position【ポジション】にmsoBarPopup【エムエスオーバーポップアップ】を設定して「ショートカットメニュー」を表すCommandBar【コマンドバー】オブジェクトを作成します。

作成した「ショートカットメニュー」を表すCommandBar【コマンドバー】オブジェクトを
CommandBarControls【コマンドバーコントロールズ】コレクションのControls【コントロールズ】プロパティで参照してAdd【アド】メソッドを使用し、引数Type【タイプ】に「サブメニューを持つメニュー」を表すmsoControlPopup【エムエスオーコントロールポップアップ】を設定しCommandBarPopup【コマンドバーポップアップ】オブジェクトを作成します。

「サブメニューを持つメニュー」を表す、CommandBarPopup【コマンドバーポップアップ】オブジェクトをCommandBarControls【コマンドバーコントロールズ】コレクションのControls【コントロールズ】プロパティで参照してAdd【アド】メソッドを使用し、引数Type【タイプ】を省略して「サブメニューを持たないボタン」を表すCommandBarButton【コマンドバーボタン】を作成します。


作成したCommandBarPopup【コマンドバーポップアップ】オブジェクトCommandBarButton【コマンドバーボタン】オブジェクトを各プロパティを使用して設定します。


ショートカットメニューのサブメニューにマクロ実行ボタンを表示するコードと解説

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim ショートカット As CommandBar
Dim メインコントロール As CommandBarPopup
Dim サブコントロール As CommandBarButton
Set ショートカット = Application.CommandBars.Add _
(Name:="ショートカットメニュ-", Position:=msoBarPopup)
Set メインコントロール = ショートカット.Controls.Add _
(Type:=msoControlPopup)
メインコントロール.Caption = "マクロ実行メニュー"
Set サブコントロール = メインコントロール.Controls.Add
With サブコントロール
.Caption = "サブボタン1"
.FaceId = 6862
.Style = msoButtonIconAndCaption
.OnAction = "メッセージ1"
.BeginGroup = True
End With
Set サブコントロール = メインコントロール.Controls.Add
With サブコントロール
.Caption = "サブボタン2"
.FaceId = 343
.Style = msoButtonIconAndCaption
.OnAction = "メッセージ2"
.BeginGroup = True
End With
With ショートカット
.ShowPopup
.Delete
End With
Cancel = True
End Sub
2行目【Dim ショートカット As CommandBar】
CommandBars【コマンドバーズ】コレクションのAdd【アド】メソッドで作成するコマンドバーを表すCommandBar【コマンドバー】オブジェクトを格納する変数「ショートカット」をオブジェクト型(CommandBar)で宣言します。


3行目【Dim メインコントロール As CommandBarPopup】
作成された「コマンドバー」を表すCommandBar【コマンドバー】オブジェクトが格納されている変数「ショートカット」をControls【コントロールズ】プロパティで参照してCommandBarControls【コマンドバーコントロールズ】コレクションのAdd【アド】メソッドで追加したコントロールを格納する変数「メインコントロール」をオブジェクト型(CommandBarPopup)で宣言します。


4行目【Dim サブコントロール As CommandBarButton】
作成された「サブメニューを持つメニュー」を表すCommandBarPopup【コマンドバーポップアップ】オブジェクトが格納されている変数「メインコントロール」をControls【コントロールズ】プロパティで参照して、CommandBarControls【コマンドバーコントロールズ】コレクションのAdd【アド】メソッドで追加したコントロールを格納する変数「サブコントロール」をオブジェクト型(CommandBarButton)で宣言します。


5行目~6行目【Set ショートカット = Application.CommandBars.Add _
(Name:=”ショートカットメニュ-“, Position:=msoBarPopup)】

Applicatio【アプリケーション】オブジェクトのCammandBars【コマンドバーズ】コレクションのAdd【アド】メソッドを使用して「コマンドバー」を追加し、オブジェクト変数の「ショートカット」に代入します。

引数Position【ポジション】にショートカットメニューを表すmsoBarPopup【エムエスオーバーポップアップ】を設定します。


7行目~8行目【Set メインコントロール = ショートカット.Controls.Add _
(Type:=msoControlPopup)】

5~6行目で追加した「コマンドバー」(CommandBarオブジェクト)をControls【コントロールズ】プロパティで参照して、CommandBarControls【コマンドバーコントロールズ】コレクションのAdd【アド】メソッドを使用して「コマンドバー」に「サブメニューを持つメニュー」(CommandBarPopupオブジェクト)を追加してオブジェクト変数「メインコントロール」に代入します。


9行目【メインコントロール.Caption = “マクロ実行メニュー”】
「サブメニューを持つメニュー」を表すCommandPopup【コマンドポップアップ】オブジェクトが格納されている変数「メインコントロール」にCaption【キャプション】プロパティを使用してコントロールに文字列を設定します。


10行目【Set サブコントロール = メインコントロール.Controls.Add】
「サブメニューを持つメニュー」を表すCommandPopup【コマンドポップアップ】オブジェクトが格納されている変数「メインコントロール」をControls【コントロールズ】プロパティで参照して、CommandBarControls【コマンドバーコンオロールズ】コレクションのAdd【アド】メソッドを使用して「サブメニュー」を追加し、オブジェクト変数「サブコントロール」に代入します。

引数Type【タイプ】を省略しているので「サブメニューを持たないボタン」のCommandBarButton【コマンドバーボタン】オブジェクトが追加されます。


11行目【With サブコントロール】
CommandBarButton【コマンドバーボタン】オブジェクトが格納されている、オブジェクト変数「サブコントロール」をWith【ウィズ】ステートメントで指定します。


12行目【.Caption = “サブボタン1″】
With【ウィズ】ステートメントで指定したCommandBarButtonオブジェクトのCaption【キャプション】プロパティを使用して
コントロールに文字列を設定します。


13行目【.FaceId = 6862】
With【ウィズ】ステートメントで指定したCommandBarButtonオブジェクトのFaceID【フェイスアイディ】プロパティにオブジェクトに表示するアイコンのID(番号)を設定します。

設定値については「コマンドバーのボタンイメージ FaceIDを取得する」をご覧ください。


14行目【.Style = msoButtonIconAndCaption】
With【ウィズ】ステートメントで指定したCommandBarButton【コマンドボタン】オブジェクトのStyle【スタイル】プロパティを使用してコントロールの表示方法を「テキストとアイコン」に指定します。


15行目【.OnAction = “メッセージ1″】
With【ウィズ】ステートメントで指定したCommandBarButton【コマンドバーボタン】オブジェクトのOnAction【オンアクション】プロパティを使用してコントロールを押したときに実行するマクロを文字列で登録します。


16行目【.BeginGroup = True】
With【ウィズ】ステートメントで指定したCommandBarButton【コマンドバーボタン】オブジェクトのBeginGroup【ビギングループ】プロパティにTrueを設定して区切り線を表示します。


18行目【Set サブコントロール = メインコントロール.Controls.Add】
「サブメニューを持つメニュー」を表すCommandPopup【コマンドポップアップ】オブジェクトが格納されている変数「メインコントロール」をControls【コントロールズ】プロパティで参照して、CommandBarControls【コマンドバーコンオロールズ】コレクションのAdd【アド】メソッドを使用して「サブメニュー」を追加し、オブジェクト変数「サブコントロール」に代入します。

オブジェクト変数「サブコントロール」は最初に格納した「サブボタン1」のCommandBarButtonオブジェクトが格納されていますが、このAdd【アド】メソッドで作成したCommandButtonオブジェクトに入れ替えます。

引数Type【タイプ】を省略しているので「サブメニューを持たないボタン」のCommandBarButton【コマンドバーボタン】オブジェクトが追加されます。


19行目~25行目
内容は11行目~16行目の解説と同じで、2つ目の「サブメニューのボタン」の設定になります。


26行目【With ショートカット】
「ショートカットメニュー」を表すCommandBar【コマンドバー】オブジェクトが格納されているオブジェクト変数「ショートカット」をWith【ウィズ】ステートメントで指定します。


27行目【.ShowPopup】
With【ウィズ】ステートメントで指定したCommandBar【コマンドバー】オブジェクトのShowPopup【ショウポップアップ】メソッドを使用して「ショートメニュー」を表すCommandBar【コマンドバー】オブジェクトを表示します。


28行目【.Delete】
With【ウィズ】ステートメントで指定したCommandBar【コマンドバー】オブジェクトのDelete【デリイト】メソッドを使用して、表示したCommandBar【コマンドバー】オブジェクトを削除します。

ここで、CommandBar【コマンドバー】オブジェクトを削除しないと次に、BeforeRightClick【ビフォアライトクリック】イベント(セルをマウス右ボタンでクリックしたとき)が発生したとき、既にあるCommandBar【コマンドバー】オブジェクトをAdd【アド】メソッドで作成してしまうのでエラーになります。


29行目【Cancel = True】
BeforeRightClick【ビフォアライトクリック】イベント(セルをマウス右ボタンでクリックしたとき)をCancel【キャンセル】にTrueを設定することでイベント処理を中止します。

この処理がない場合は、「オリジナルショートカットメニュー」が表示したあとに「標準のショートカットメニュー」が表示されます。


サブメニューのボタンを押したときに実行するマクロのコードと解説

Private Sub メッセージ1()
MsgBox "サブボタン1がクリックされました。"
End Sub

Private Sub メッセージ2()
MsgBox "サブボタン2がクリックされました。"
End Sub
実行するマクロは、標準モジュールにPrivate【プライベート】キーワードを使用したPrivate Sub【プライベートサブ】プロシージャ内に記述します。Private【プラベート】キーワードを使用するとマクロ実行ダイアログの一覧に表示されません。

実行結果



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

スポンサーリンク

関連記事・広告