トップへ(mam-mam.net/)

独自のメニューを追加する ~Excel VBA

独自のメニューを追加する ~Excel VBA

エクセルVBAで独自のメニューを追加するには
Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup)
を使います。

Rem 独自メニューを追加します
Sub AddOriginalMenu()
    Dim MainMenu As Variant, SubMenu1 As Variant, SubMenu2 As Variant
    Dim cbc As CommandBarControl
    Dim ret As VbMsgBoxResult
    
    Rem 既にメニューが存在しているか確認
    For Each cbc In Application.CommandBars("Worksheet Menu Bar").Controls
        If cbc.Caption = "独自メニュー" Then
            ret = MsgBox("独自メニュー は既に存在しています", vbOKOnly, "確認")
            Exit Sub
        End If
    Next
    
    Rem 独自メニューを追加する
    Set MainMenu = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup)
    MainMenu.Caption = "独自メニュー"
    
    Rem 独自メニューのサブメニューを追加しクリックでMyMacro1プロシージャを実行する
    Set SubMenu1 = MainMenu.Controls.Add
    With SubMenu1
        .Caption = "MyMacro1を実行(&A)"
        .OnAction = "MyMacro1"
        .BeginGroup = False
        .FaceId = 3   '表示するアイコンで3はフロッピーアイコン
    End With
    
    Rem 独自メニューのサブメニューを追加しクリックでMyMacro2プロシージャを実行する
    Set SubMenu2 = MainMenu.Controls.Add
    With SubMenu2
        .Caption = "MyMacro2を実行(&B)"
        .OnAction = "MyMacro2"
        .BeginGroup = False
        .FaceId = 23   '表示するアイコンで23は開くアイコン
    End With
End Sub

Rem 追加した独自のメニューを削除します。
Sub DeleteOriginalMenu()
    Dim ret As VbMsgBoxResult
    Application.CommandBars("Worksheet Menu Bar").Controls("独自メニュー").Delete
    ret = MsgBox("独自メニュー を削除しました", vbOKOnly, "確認")
End Sub

Sub MyMacro1()
    Dim ret As VbMsgBoxResult
    ret = MsgBox("MyMacro1が実行されました", vbOKOnly, "確認")
End Sub

Sub MyMacro2()
    Dim ret As VbMsgBoxResult
    ret = MsgBox("MyMacro2が実行されました", vbOKOnly, "確認")
End Sub