利用VBA創建Excel新菜單

利用VBA創建Excel新菜單

使用VBA,可以很方便地向Excel菜單欄添加新菜單。
背景知識
1、菜單欄屬於CommandBars集合,可以通過菜單欄名稱或索引值對其進行引用:
CommandBars(“Worksheet Menu Bar”)或CommandBars(1)
2、新添加的菜單是一個彈出式控件,其類型爲msoControlPopup。
3、通過Add方法向Controls集合中添加新的控件。Add方法可以指定控件的類型、內置控件的ID號、位置及是否是一個臨時控件。如果是一個臨時控件,則在關閉Excel時會自動刪除該菜單。
4、可以指定新菜單的位置。如果不指定,則會在菜單工具欄末尾添加新菜單。
5、使用Caption屬性指定新菜單的名稱,使用OnAction屬性指定單擊菜單後的行爲。
6、爲了避免指定的菜單不存在,可以使用FindControl方法查找要指定的菜單。若指定的菜單不存在,則在工作表菜單欄末尾添加新菜單。
添加菜單
向Excel工作表菜單欄中添加菜單的過程清單如下:
Sub AddNewMenu()
    Dim HelpMenu As CommandBarControl
    Dim NewMenu As CommandBarPopup
    
    '利用ID屬性查找幫助菜單
    Set HelpMenu = CommandBars(1).FindControl(ID:=30010)
    
    If HelpMenu Is Nothing Then
        '如果該菜單不存在,則將新菜單添加到末尾
        '設置新菜單爲臨時的
        Set NewMenu = CommandBars(1).Controls _
          .Add(Type:=msoControlPopup, Temporary:=True)
    Else
        '將新菜單添加到幫助菜單之前
        Set NewMenu = CommandBars(1).Controls _
          .Add(Type:=msoControlPopup, Before:=HelpMenu.Index, _
          Temporary:=True)
    End If
    
    '添加標題並指定快捷鍵
    NewMenu.Caption = "統計(&S)"
End Sub

運行該過程後,將在工作表菜單的“幫助”菜單左側添加一個名爲“統計”的新菜單。
注:要刪除新添加的菜單,使用Delete方法即可,例如代碼:

CommandBars(1).Controls("統計(&S)").Delete

將刪除剛創建的“統計”菜單。
添加菜單項
與添加新菜單一樣,在添加菜單項及子菜單時,使用Add方法,且指定合適的控件類型,其代碼清單如下:
Sub AddNewMenu()
    Dim HelpMenu As CommandBarControl
    Dim NewMenu As CommandBarPopup
    Dim MenuItem As CommandBarControl
    Dim SubMenuItem As CommandBarButton
    
    On Error Resume Next
    '如果菜單已存在,則刪除該菜單
    CommandBars(1).Controls("統計(&S)").Delete
    
    '利用ID屬性查找幫助菜單
    Set HelpMenu = CommandBars(1).FindControl(ID:=30010)
    
    If HelpMenu Is Nothing Then
        '如果該菜單不存在,則將新菜單添加到末尾
        '設置新菜單爲臨時的
        Set NewMenu = CommandBars(1).Controls _
          .Add(Type:=msoControlPopup, Temporary:=True)
    Else
        '將新菜單添加到幫助菜單之前
        Set NewMenu = CommandBars(1).Controls _
          .Add(Type:=msoControlPopup, Before:=HelpMenu.Index, _
          Temporary:=True)
    End If
    
    '添加菜單標題並指定熱鍵
    NewMenu.Caption = "統計(&S)"
    
    '添加第一個菜單項
    Set MenuItem = NewMenu.Controls.Add _
      (Type:=msoControlButton)
    With MenuItem
        .Caption = "輸入數據(&D)..."
        .FaceId = 162
        .OnAction = "Macro1"
    End With
    
    '添加第二個菜單項
    Set MenuItem = NewMenu.Controls.Add _
      (Type:=msoControlButton)
    With MenuItem
        .Caption = "彙總數據(&T)..."
        '添加快捷鍵
        .ShortcutText = "Ctrl+Shift+T"
        .FaceId = 590
        .OnAction = "Macro2"
    End With
    
    '添加第三個菜單項
    '本菜單有子菜單項,因此其類型爲msoControlPopup
    Set MenuItem = NewMenu.Controls.Add _
      (Type:=msoControlPopup)
    With MenuItem
        .Caption = "數據報表(&R)..."
        '添加分隔線
        .BeginGroup = True
    End With
    
    '添加子菜單
    '添加第一個子菜單
    Set SubMenuItem = MenuItem.Controls.Add _
      (Type:=msoControlButton)
    With SubMenuItem
        .Caption = "月彙總(&M)"
        .FaceId = 110
        .OnAction = "Macro3"
    End With
    
    '添加第二個子菜單
    Set SubMenuItem = MenuItem.Controls.Add _
      (Type:=msoControlButton)
    With SubMenuItem
        .Caption = "季度彙總(&Q)"
        .FaceId = 222
        .OnAction = "Macro4"
    End With
End Sub

注意,菜單類型的不同,有二個菜單項(類型爲msoControlButton)、有一個菜單項帶有子菜單(其類型爲msoControlPopup)
FaceID屬性確定出現在菜單文本旁邊的圖像,以數字表示,一個數字代表一個內置的圖像。
在Caption屬性中使用&號表示該菜單項的熱鍵。
在第二個菜單項中,利用ShortcutText屬性爲該菜單項添加了一個快捷鍵,用戶按此快捷鍵可以直接運行命令。
所添加的菜單如下圖所示。

圖:添加的新菜單

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章