Excel VBA サブメニューがあるボタン(マクロ実行ボタン)を作成する

スポンサーリンク

サブメニューにボタンを作成する方法

作成したマクロを実行するための「ボタン」や「メニュー」を作成するにはCommandBars【コマンドバーズ】コレクションのAdd【アド】メソッドを使用して
コマンドバーを表すCommandBar【コマンドバー】オブジェクトを作成します。

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

作成された「サブメニュー持つコントロール」を表すCommandBarPopup【コマンドバーポップアップ】オブジェクトのコントロールをCommandBarControls【コマンドバーコントロールズ】コレクションのControls【コントロールズ】プロパティで参照して、CommandBarControls【コマンドバーコントロールズ】コレクションのAdd【アド】メソッドでサブメニューを表すCommndBarButton【コマンドバーボタン】オブジェクトを追加してサブメニューのボタンコントロールを追加し各プロパティでサブメニューのボタンを設定します。

複数のサブメニュー(ボタン)を作成する場合は、サブメニューを格納するオブジェクト変数を複数宣言する必要はありません。メインのコントロールを表すオブジェクト変数(CommandBarPopupオブジェクト)をControls【コントロールズ】プロパティで参照して
Add【アド】メソッドで作成したサブボタン(CommandBarButtonオブジェクト)を宣言したオブジェクト変数に入れ替えながら格納したサブボタンに対してプロパティの設定を行うことができます。

最後に、CommandBar【コマンドバー】オブジェクトのVisible【ビジブル】プロパティを使用して
作成したCommandBar【コマンドバー】オブジェクトを「アドイン」タブ内のリボンに表示します。

コマンドボタンを追加するコードは、ブックが開いたタイミングで実行される「イベントプロシージャ」のWorkbook Open【ワークブックオープン】プロシージャに記述します。


「メッセージ1」と「メッセージ2」マクロを実行する「サブボタン」を作成するコードと解説

Private Sub Workbook_Open()
Dim ボタン As CommandBar
Dim メインコントロール As CommandBarPopup
Dim サブコントロール As CommandBarButton
On Error Resume Next
CommandBars("オリジナルボタン").Delete
Set ボタン = Application.CommandBars.Add _
(Name:="オリジナルボタン", temporary:=True)
Set メインコントロール = ボタン.Controls.Add _
(Type:=msoControlPopup, temporary:=True)
With メインコントロール
.Caption = "オリジナルメニュー"
.TooltipText = "サブボタンを開きます。"
End With
Set サブコントロール = メインコントロール.Controls.Add _
(temporary:=True)
With サブコントロール
.Caption = "サブボタン1"
.FaceId = 6862
.Style = msoButtonIconAndCaption
.OnAction = "メッセージ1"
.BeginGroup = True
.TooltipText = "メッセージ1マクロを実行します。"
End With
Set サブコントロール = メインコントロール.Controls.Add _
(temporary:=True)
With サブコントロール
.Caption = "サブボタン2"
.FaceId = 343
.Style = msoButtonIconAndCaption
.OnAction = "メッセージ2"
.BeginGroup = True
.TooltipText = "メッセージ2マクロを実行します。"
End With
ボタン.Visible = True
End Sub

2行目【Dim ボタン As CommandBar】
追加するコマンドバーを格納する変数「ボタン」をオブジェクト型(CommandBar)で宣言します。


3行目【Dim メインコントロール As CommandBarPopup】
追加したコマンドバーに追加する「サブメニューを持つコントロール」を格納する変数「コントロール」をオブジェクト型(CommandBarPopup)で宣言します。


4行目【Dim サブコントロール As CommandBarButton】
「サブメニューを持つコントロール」のサブメニューのコントロールを格納する
変数「サブコントロール」をオブジェクト型(CommandBarButton)で宣言します。


5行目【On Error Resume Next】
次の行6行目で、CommandBarオブジェクトのDelete【デリイト】メソッドで「オリジナルボタン」という名前のCommandBarオブジェクトを削除する命令をだしますが、対象オブジェクトが存在しない場合、エラーが発生してデバックモードになってしまうので、On Error【オンエラー】ステートメントのResume Next【リズームネクスト】ステートメントを使用してエラーを無視して処理を続行させます。


6行目 【CommandBars(“オリジナルボタン”).Delete】
次の7行目で、コマンドバーを追加しますが、既に同じ名前のコマンドバーが既に存在しているとエラーになるので、Application【アプリケーション】オブジェクトのCommansBars【コマンドバーズ】プロパティで名前が「オリジナルボタン」のCommandBarオブジェクトを参照して、存在する場合は削除します。


7行目~8行目【Set ボタン = Application.CommandBars.Add _
(Name:=”オリジナルボタン”, Temporary:=True)】

Application【アプリケーション】オブジェクトのCommandBars【コマンドバーズ】コレクションのAdd【アド】メソッドで引数Name【ネーム】に指定した名前のコマンドバーを追加してオブジェクト変数の「ボタン」に代入します。引数Temporary【テンポラリ】にTrueを設定したのでこのブックが閉じられたときにコマンドバーは削除されます。Falseに設定した場合はこのブックが閉じられてもコマンドバーは残り、他のブックを開いた場合にも追加したコマンドバーは表示されます。


9行目~10行目【Set メインコントロール = ボタン.Controls.Add _
(Type:=msoControlPopup, temporary:=True)】

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


11行目【With メインコントロール】
「サブメニューを持つコントロール」を表すCommandBarPopup【コマンドバーポップアップ】オブジェクトが格納されているオブジェクト変数「メインコントロール」をWith【ウィズ】ステートメントで指定します。


12行目【.Caption = “オリジナルメニュー”】
CommandBarPopup【コマンドバーポップアップ】オブジェクトのCaption【キャプション】プロパティを使用してコントロールに表示する文字列を指定します。


13行目【.TooltipText = “サブボタンを開きます。”】
CommandBarPopup【コマンドバーポップアップ】オブジェクトのTooltipText【ツールチップテキスト】プロパティを使用してマウスポインターがコントロール上にあるときに表示する「ポップヒント」の文字列を指定します。


15行目~16行目【Set サブコントロール = メインコントロール.Controls.Add _
(temporary:=True)】

CommandBarPopup【コマンドバーポップアップ】オブジェクトが格納されている変数「メインコントロール」をContorols【コンロトールズ】プロパティで参照して、Add【アド】メソッドを使用してコントロールを追加し、オブジェクト変数の「サブコントロール」に代入します。Add【アド】メソッドの引数Type【タイプ】を省略しているので作成されるコントロールは、「サブメニューを持たないボタン」のCommandBarButton【コマンドバーボタン】オブジェクトが作成されます。


17行目【With サブコントロール】
15~16行目で作成した「サブメニューのボタン」を表すCommandBarButton【コマンドバーボタン】オブジェクトが格納されているオブジェクト変数「サブコントロール」をWith【ウィズ】ステートメントで指定します。


18行目【.Caption = “サブボタン1″】
CommandBarButton【コマンドバーボタン】オブジェクトのCaption【キャプション】プロパティにオブジェクトに表示する名前を設定します。


19行目【.FaceId = 6862】
CommandBarButton【コマンドバーボタン】オブジェクトのFaceID【フェイスアイディ】プロパティにオブジェクトに表示するアイコンのID(番号)を設定します。設定値については「コマンドバーのボタンイメージ FaceIDを取得する」をご覧ください。


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


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


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


23行目【.TooltipText = “メッセージ1マクロを実行します。”】
CommandBarButton【コマンドバーボタン】オブジェクトのTooltipText【ツールチップテキスト】プロパティにポップヒントに表示する文字列を指定します。


25行目~34行目
「サブメニューを持つオブジェクト」CommandBarPopup【コマンドバーポップアップ】オブジェクトに2つ目のコントロール(CommandBarButton【コマンドバーボタン】オブジェクト)を追加して、プロパティで設定します。

CommandBarButton【コマンドバーボタン】オブジェクトを格納するオブジェクト変数「サブコントロール」は15行目~23行目で作成した「サブボタン1」のCommandbarButtonオブジェクトを取り出して新たに作成する「サブボタン2」のCommandbarButtonオブジェクトを格納します。作成方法やプロパティの設定方法は「サブボタン1」と同じです。


35行目【ボタン.Visible = True】
CommandBar【コマンドバー】オブジェクトのVisible【ブジブル】プロパティを使用して作成したコマンドバーを「アドイン」タブのリボンに表示します。


実行するマクロの「メセージ1」と「メッセージ2」のコードと解説

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

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

実行結果




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

スポンサーリンク

関連記事・広告