【Excel VBA】メニューバーに独自メニューを追加する

当ページのリンクには広告が含まれている可能性があります。
独自メニュー追加

こんにちは、ユーキです。

今回は、Excelのメニューバーに独自メニューを追加するやり方を紹介します。

目次

メニューを追加する

メニューバーのオブジェクト取得

まず、メニューを追加するための、メニューバーのオブジェクトを取得します。

Dim menuBar As CommandBar
Set menuBar = Application.CommandBars("Worksheet Menu Bar")

変数名は何でもよいですが、「Application.CommandBars(“Worksheet Menu Bar”)」は定型句だと思ってください。

ボタンを追加

先ほど取得したメニューバーにボタンを追加します。

Dim menuBtn1 As CommandBarButton
Set menuBtn1 = menuBar.Controls.Add(Type:=msoControlButton)
'追加ボタンをテキスト形式となるよう設定
menuBtn1.Style = msoButtonCaption
menuBtn1.Caption = "テストボタン"

追加するボタンは、文字列にしたいので、StyleをmsoButtonCaptionに設定しています。
表示するテキストは、Captionで指定をします。

実行すると、以下のようになります。

メニューボタン

サブメニューを追加

サブメニューにしたい場合の記述は以下のようになります。

'サブメニューを追加
Dim menuSbMenu As CommandBarPopup
Set menuSbMenu = menuBar.Controls.Add(Type:=msoControlPopup)
menuSbMenu.Caption = "yuuqyアドイン"
Dim sbMBtn1 As CommandBarButton
Set sbMBtn1 = menuSbMenu.Controls.Add(Type:=msoControlButton)
sbMBtn1.Style = msoButtonCaption
sbMBtn1.Caption = "サブボタン1"

サブメニューは、Typeが「msoControlPopup」になります。
サブメニューにメニューを追加するには、サブメニューに、ボタンを追加する形になります。

実行結果は以下の通りです。

サブメニューとボタン

追加したボタンに処理を割り当てる

処理を割り当てるには、OnActionプロパティを設定します。
さきほど、追加したサブボタン1に処理を指定します。指定するのは、呼び出すモジュール名になります。
モジュールは標準モジュールに定義をしてください。

sbMBtn1.OnAction = "ShowHello"
’以下は標準モジュールに記載をします。
Private Sub ShowHello()
    MsgBox "こんにちは"
End Sub

コード全行

ここまで書いた処理をまとめました。
これを全部行うと、ボタンとサブメニューが追加されます。

Dim menuBar As CommandBar
Set menuBar = Application.CommandBars("Worksheet Menu Bar")
’ボタンを追加
Dim menuBtn1 As CommandBarButton
Set menuBtn1 = menuBar.Controls.Add(Type:=msoControlButton)
'追加ボタンをテキスト形式となるよう設定
menuBtn1.Style = msoButtonCaption
menuBtn1.Caption = "テストボタン"
'サブメニューを追加
Dim menuSbMenu As CommandBarPopup
Set menuSbMenu = menuBar.Controls.Add(Type:=msoControlPopup)
menuSbMenu.Caption = "yuuqyアドイン"
Dim sbMBtn1 As CommandBarButton
Set sbMBtn1 = menuSbMenu.Controls.Add(Type:=msoControlButton)
sbMBtn1.Style = msoButtonCaption
sbMBtn1.Caption = "サブボタン1"
sbMBtn1.OnAction = "ShowHello"
’以下は標準モジュールに記載をします。
Private Sub ShowHello()
    MsgBox "こんにちは"
End Sub

実行結果は以下のようになります。

メニュー追加の実行結果

追加したメニュー、ボタンを削除する

追加したメニューを削除するやり方もみておきましょう。

コードで削除

コードで削除する場合、Deleteメソッドを使用します。

Dim menuBar As CommandBar
Set menuBar = Application.CommandBars("Worksheet Menu Bar")
menuBar.Controls("テストボタン").Delete
menuBar.Controls("yuuqyアドイン").Delete

全ボタンを削除してよい場合、コントロール名ではなく、インデックス指定で削除することも可能です。

Dim menuBar As CommandBar
Set menuBar = Application.CommandBars("Worksheet Menu Bar")
Dim i As Integer
For i = 1 To menuBar.Controls.Count
    ’繰り返しで要素が減っていくので、常に1番目の要素を削除
    menuBar.Controls(1).Delete
Next

手動削除

対象メニュー、ボタンを右クリックし、「ユーザー設定のコマンドを削除」を選択すれば、メニュー、ボタンは削除されます。

まとめ

今回は、Excelのメニューバーに独自のメニューを追加、削除する方法についての紹介でした。

Point
  • Application.CommandBars(“Worksheet Menu Bar”)でメニューバーのオブジェクトを取得する
  • 取得したメニューバーにボタンを追加するのはControls.Add(Type:=msoControlButton)
  • サブメニューも追加する場合は、Controls.Add(Type:=msoControlPopup)
  • ボタン、メニューを削除するにはDeleteメソッドを使用する
  • ボタン、メニューは手動にて削除することも可能

少しでもお役に立てば、幸いです。

スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

旅好き職業プログラマ。文系大学卒業後、ITソフトウエア開発会社に勤務してプログラミング言語を学ぶ。現在は転職し、プロジェクトマネージャ的ポジションで生産管理システムの開発にあたる。
得意言語は、VB、VB.NET、C#.NET、Java、SQLなど。

目次