您的位置:首页 > 编程语言 > VB

利用VBA创建Excel新菜单

2011-08-16 14:28 429 查看


利用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属性为该菜单项添加了一个快捷键,用户按此快捷键可以直接运行命令。

所添加的菜单如下图所示。



图:添加的新菜单
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: