分享

使用VBA向Excel菜单栏添加新菜单的通用方法 Excel教程

 昵称QAb6ICvc 2017-04-28

 1、菜单栏属于CommandBars集合,可以通过菜单栏名称或索引值对其进行引用:CommandBars(“Worksheet Menu Bar”)或CommandBars(1)

  2、新添加的菜单是一个弹出式控件,其类型为msoControlPopup。

  3、通过Add方法向Controls集合中添加新的控件。Add方法可以指定控件的类型、内置控件的ID号、位置及是否是一个临时控件。如果是一个临时控件,则在关闭Excel时会自动删除该菜单。

  4、可以指定新菜单的位置。如果不指定,则会在菜单工具栏末尾添加新菜单。

  5、使用Caption属性指定新菜单的名称,使用OnAction属性指定单击菜单后的行为。

  6、为了避免指定的菜单不存在,可以使用FindControl方法查找要指定的菜单。若指定的菜单不存在,则在工作表菜单栏末尾添加新菜单。

  以下是向Excel工作表菜单栏中添加菜单的VBA代码:

  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 = "统计( 
  End Sub

  运行该过程后,将在工作表菜单的“帮助”菜单左侧添加一个名为“统计”的新菜单。

  注:要删除新添加的菜单,使用Delete方法即可,例如代码:

CommandBars(1).Controls("统计( 
将删除刚创建的“统计”菜单。
添加菜单项
与添加新菜单一样,在添加菜单项及子菜单时,使用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("统计( 

'利用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 = "统计( 

'添加第一个菜单项
Set MenuItem = NewMenu.Controls.Add _
(Type:=msoControlButton)
With MenuItem
.Caption = "输入数据( 
.FaceId = 162
.OnAction = "Macro1"
End With

'添加第二个菜单项
Set MenuItem = NewMenu.Controls.Add _
(Type:=msoControlButton)
With MenuItem
.Caption = "汇总数据( 
'添加快捷键
.ShortcutText = "Ctrl Shift T"
.FaceId = 590
.OnAction = "Macro2"
End With

'添加第三个菜单项
'本菜单有子菜单项,因此其类型为msoControlPopup
Set MenuItem = NewMenu.Controls.Add _
(Type:=msoControlPopup)
With MenuItem
.Caption = "数据报表( 
'添加分隔线
.BeginGroup = True
End With

'添加子菜单
'添加第一个子菜单
Set SubMenuItem = MenuItem.Controls.Add (Type:=msoControlButton)
With SubMenuItem
.Caption = "月汇总( 
.FaceId = 110
.OnAction = "Macro3"
End With

'添加第二个子菜单
Set SubMenuItem = MenuItem.Controls.Add _
(Type:=msoControlButton)
With SubMenuItem
.Caption = "季度汇总( 
.FaceId = 222
.OnAction = "Macro4"
End With
End Sub

  注意,菜单类型的不同,有二个菜单项(类型为msoControlButton)、有一个菜单项带有子菜单(其类型为msoControlPopup)FaceID属性确定出现在菜单文本旁边的图像,以数字表示,一个数字代表一个内置的图像。
在Caption属性中使用

  在第二个菜单项中,利用ShortcutText属性为该菜单项添加了一个快捷键,用户按此快捷键可以直接运行

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多