Microsoft Excel VBA - メニュー/サブメニューの追加と削除を行う方法
◆概要
このページは、Excel VBA を使用して、新規のメニューバーを作成し、メニュー / サブメニューの追加と削除を行う方法について記載しています。
◆内容
VBA でメニューバーを指定するときは、CommandBars オブジェクトを使用します。この CommandBars オブジェクトはツールバーを指定するときにも使われます。
◆新しいメニューを作成する
'新規メニューバーの作成 Sub Menu_Add() Application.CommandBars.Add Name:="New_Bar", _ Position:=msoBarTop, MenuBar:=True With Application.CommandBars("New_Bar") .Visible = True .Controls.Add Type:=msoControlPopup .Controls(1).Caption = "新規メニュー" With .Controls(1) .Controls.Add Type:=msoControlButton With .Controls(1) .Caption = "追加コマンド1" .OnAction = "Msg_1" End With .Controls.Add Type:=msoControlPopup With .Controls(2) .Caption = "追加コマンド2" .Controls.Add Type:=msoControlButton .Controls(1).Caption = "サブコマンド" .Controls(1).OnAction = "Msg_2" End With End With .Controls.Add Type:=msoControlPopup .Controls(2).Caption = "削除メニュー" With .Controls(2) .Controls.Add Type:=msoControlButton With .Controls(1) .Caption = "新規メニューの削除" .OnAction = "Menu_Del" End With End With End With End Sub '新規メニューバーの削除 Sub Menu_Del() Dim Ans As Byte Ans = MsgBox("新規メニューを削除しますか?", vbYesNo) If Ans = vbYes Then Application.CommandBars("New_Bar").Delete End If End Sub '追加コマンド 1 の処理 Sub Msg_1() MsgBox "追加コマンド1を処理しました。" End Sub '追加コマンド 2 のサブメニューの処理 Sub Msg_2() MsgBox "追加コマンド2のサブメニューを処理しました。" End Sub
◆実行結果
Excel 2003の場合、標準のメニューが置き換えられるExcel 2007の場合、アドインに追加される
◆既存のメニューに新しいメニューを追加する
既存のメニューに新しいメニューを追加します。次の例は、[ファイル]メニューの右に「カスタムメニュー」を追加します。
Sub AddMenu() 'メニューを追加する Dim oMyCommandBar As CommandBar 'CommandBarPopupオブジェクトによって、メニューバー上のメニューを '選択すると表示されるポップアップメニューが表示される Dim oPopup As CommandBarPopup Dim oPopupCascade As CommandBarPopup 'Word,PowerPoint,Accessでは、メニューバーは"Menu Bar"という名前で表される。 'Excelの場合は、"WorkSheet Menu Bar" Set oMyCommandBar = CommandBars("Worksheet Menu Bar") 'メニューバーにメニューを追加する With oMyCommandBar.Controls Set oPopup = .Add(msoControlPopup, , , 2) 'Addメソッドの4つ目の引数は、 '"Before"と呼ばれるもので、メニューがコレクションのどこに置かれるかを '指定しています。 'ここでは、2という値になっているので、新しいメニューは[ファイル]メニュー 'の右に置かれることを意味します。 With oPopup .Caption = "カスタムメニュー" With .Controls.Add(msoControlButton) .Caption = "カスタム項目1(&M)" .OnAction = "DisplayMessageBox" End With End With 'サブメニューの追加 Set oPopupCascade = oPopup.Controls.Add(msoControlPopup) With oPopupCascade .Caption = "サブメニュー(&C)" With .Controls.Add(msoControlButton) .Caption = "項目1(&I)" .OnAction = "DisplayMessageBox" End With With .Controls.Add(msoControlButton) .Caption = "項目2(&T)" .OnAction = ("DisplayMessageBox") End With End With End With End Sub Sub DisplayMessageBox() 'カスタムメニューから呼ばれるプロシージャ MsgBox "カスタム項目が選択されました" End Sub
◆実行結果
追加されたカスタムメニューを削除するには、[表示]-[ツールバー]-[ユーザー設定]で、[ワークシート メニューバー]を選択し、リセットボタンを押します。または、次のコードを実行します。
Sub RemoveMenu() 'メニューを削除する Dim oCmdCtl As CommandBarControl For Each oCmdCtl In CommandBars("Worksheet Menu Bar").Controls If oCmdCtl.Caption = "カスタムメニュー" Then oCmdCtl.Delete Exit For End If Next oCmdCtl End Sub
◆既存のメニューに新しいメニュー項目を追加する
次の例は、[ファイル]メニューの4番目にカスタムというメニュー項目を追加します。
Sub AddMenuItem() '既存のメニューにメニュー項目を追加する Dim oCmdPopup As CommandBarPopup Dim oCmdButton As CommandBarButton 'Excelの[ファイル]メニューにアクセスする Set oCmdPopup = CommandBars("Worksheet Menu Bar") _ .Controls("ファイル(F)") '新しいメニュー項目を追加する Set oCmdButton = oCmdPopup.Controls.Add( _ Type:=msoControlButton, before:=4) '新しいメニュー項目のプロパティ設定を行う With oCmdButton .Caption = "カスタム項目" .OnAction = "DisplayMessageBox" End With End Sub Sub DisplayMessageBox() 'カスタムメニューから呼ばれるプロシージャ MsgBox "カスタム項目が選択されました" End Sub
◆実行結果
追加されたカスタムメニューを削除するには、[表示]-[ツールバー]-[ユーザー設定]で、[ワークシート メニューバー]を選択し、リセットボタンを押します。もしくは、次のコードを実行します。
Sub RemoveMenuItem() '既存のメニューからメニュー項目を削除する Dim oCmdPopup As CommandBarPopup Dim oCmdCtl As CommandBarControl Set oCmdPopup = CommandBars("Worksheet Menu Bar").Controls("ファイル(F)") 'ファイルメニューのCommandBarControlsコレクションを解析するループを作成する For Each oCmdCtl In oCmdPopup.Controls If oCmdCtl.Caption = "カスタム項目" Then oCmdCtl.Delete Exit For End If Next oCmdCtl End Sub
◆コマンドバーにドロップダウンリストを作成する
次のコードを実行した後、適当なツールバー上でマウスの右ボタンをクリックして、ショートカットメニューから[コマンドバー]を選択し、新しく作成されたツールバーを確認してください。
Sub AddComboToolbar() 'ドロップダウンリストボックスを作成する Dim oMyCommandBar As CommandBar Dim oComboBox As CommandBarComboBox Dim oDropDown As CommandBarComboBox Set oMyCommandBar = Application.CommandBars.Add("コマンドバー") With oMyCommandBar.Controls 'ドロップダウンコンボボックスを追加 Set oComboBox = .Add(msoControlComboBox) With oComboBox .AddItem "項目2" .AddItem "項目1", 1 .AddItem "項目3" .Caption = "コンボボックス" 'ドロップダウンリストに最初に表示される項目を項目1に設定 .ListIndex = 1 .OnAction = "DisplayMessageBox" End With Set oDropDown = .Add(msoControlDropdown) With oDropDown .BeginGroup = True '仕切り線 .AddItem "項目1" .AddItem "項目2" .ListIndex = 1 .Style = msoComboLabel 'ラベル付きのドロップダウンボックス .Caption = "ラベル" .OnAction = "DisplayMessageBox" End With End With End Sub
◆実行結果
追加されたコマンドバーから、「ラベル」という項目をを削除するには、次のコードを実行します。
Sub RemoveToolbarItem() 'ツールバーの項目を削除する Dim oMyCommandBar As CommandBar Dim oCmdCtl As CommandBarControl Dim sToolbarItem As String sToolbarItem = "ラベル" Set oMyCommandBar = CommandBars("コマンドバー") With oMyCommandBar For Each oCmdCtl In .Controls If oCmdCtl.Caption = sToolbarItem Then oCmdCtl.Delete End If Next oCmdCtl End With End Sub
◆実行結果
追加されたコマンドバー自体を削除するには、[表示]-[ツールバー]-[ユーザー設定]で、[ツールバー]タブを選択し、リストにある「コマンドバー」を選択し[削除]ボタンを押します。もしくは、次のコードを実行します。
Sub RemoveToolbar() 'ツールバー[コマンドバー]を削除する Dim oMYCmdBar As CommandBar Dim oCmdBar As CommandBar For Each oCmdBar In Application.CommandBars If oCmdBar.Name = "コマンドバー" Then Set oMYCmdBar = oCmdBar Exit For End If Next oCmdBar If Not oMYCmdBar Is Nothing Then oMYCmdBar.Delete End Sub
▼ページトップへ