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


実行結果




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

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

フォローする

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