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キーワードを使用すると
マクロ実行ダイアログの一覧に表示されません。


実行結果



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

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク