83 定制自己的系统菜单
使用VBA开发的小型应用系统完成后,Excel原有的菜单栏完全可以舍弃不用,只使用自定义的菜单栏,更加方便快捷,如下面的代码所示。
Sub AddNowBar()
DimNewBar As CommandBar
On ErrorResume Next
WithApplication
.CommandBars('Standard').Visible= False
.CommandBars('Formatting').Visible= False
.CommandBars('Stop Recording').Visible= False
.CommandBars('toolbar list').Enabled= False
.CommandBars.DisableAskAQuestionDropdown= True
.DisplayFormulaBar = False
.CommandBars('NewBar').Delete
EndWith
SetNewBar = Application.CommandBars.Add(Name:='NewBar',Position:=msoBarTop,MenuBar:=True,Temporary:=True)
WithNewBar
.Visible = True
With .Controls.Add(Type:=msoControlPopup)
.Caption = '系统设置(&X)'
.BeginGroup = True
With .Controls.Add(Type:=msoControlButton)
.Caption = '保存(&S)'
.BeginGroup = True
.FaceId = 1975
End With
With .Controls.Add(Type:=msoControlButton)
.Caption = '备份(&B)'
.BeginGroup = True
.FaceId = 747
End With
End With
With .Controls.Add(Type:=msoControlPopup)
.Caption = '会计凭证(&P)'
.BeginGroup = True
With .Controls.Add(Type:=msoControlButton)
.Caption = '录入(&L)'
.BeginGroup = True
.FaceId = 197
End With
With .Controls.Add(Type:=msoControlButton)
.Caption = '审核(&S)'
.BeginGroup = True
.FaceId = 714
End With
End With
With .Controls.Add(Type:=msoControlPopup)
.Caption = '会计账簿(&Z)'
.BeginGroup = True
With .Controls.Add(Type:=msoControlButton)
.Caption = '记账(&L)'
.BeginGroup = True
.FaceId = 65
End With
With .Controls.Add(Type:=msoControlButton)
.Caption = '结账(&S)'
.BeginGroup = True
.FaceId = 47
End With
End With
With .Controls.Add(Type:=msoControlPopup)
.Caption = '会计报表(&B)'
.BeginGroup = True
With .Controls.Add(Type:=msoControlPopup)
.Caption = '资产负债表(&Y)'
.BeginGroup = True
With .Controls.Add(Type:=msoControlButton)
.Caption = '月报(&M)'
.BeginGroup = True
.FaceId = 1180
End With
With .Controls.Add(Type:=msoControlButton)
.Caption = '年报(&Y)'
.BeginGroup = True
.FaceId = 1188
End With
End With
With .Controls.Add(Type:=msoControlPopup)
.Caption = '损益表(&S)'
.BeginGroup = True
With .Controls.Add(Type:=msoControlButton)
.Caption = '月报(&M)'
.BeginGroup = True
.FaceId = 1180
End With
With .Controls.Add(Type:=msoControlButton)
.Caption = '年报(&Y)'
.BeginGroup = True
.FaceId = 1188
End With
End With
End With
With .Controls.Add(Type:=msoControlButton)
.Caption = '退出系统(&C)'
.BeginGroup = True
.Style = msoButtonCaption
End With
EndWith
SetNewBar = Nothing
End Sub
代码解析:
AddNowBar过程使用Add方法创建自定义菜单栏替换工作表菜单栏。
第2行代码定义变量NewBar为命令栏。
第3行代码忽略错误语句,以免第11行代码在删除可能不存在的“NewBar”菜单栏时发生错误。
第5行代码隐藏“常用”工具栏。
第6行代码隐藏“格式”工具栏。
第7行代码隐藏“停止录制”工具栏。
第8行代码屏蔽工具栏的右键快捷菜单。
第9行代码屏蔽工具栏的“键入需要帮助的问题”下拉框。
第10行代码屏蔽工具栏的编辑栏。
第11行代码,在添加命令栏前先删除“NewBar”菜单栏,以免重复增加。
第13行代码,使用Add方法创建命令栏。Add方法应用于CommandBars对象的语法如下:
expression.Add(Name,Position,MenuBar,Temporary)
参数expression是必需的,返回一个CommandBars对象,该对象代表应用程序中的命令栏,新建命令栏的控件均以该对象为载体。
参数Name是可选的,设置新建命令栏的标题。如果忽略该参数,则为新建命令栏指定默认标题,本例中设置新建命令栏的标题为“NewBar”。
参数Position是可选的,设置新建命令栏的位置或类型,可以为表格所列的 MsoBarPosition常数之一。
本例中设置“NewBar”命令栏的Position参数为msoBarTop,使“NewBar”命令栏位于Excel窗口的顶部。
参数MenuBar是可选的,设置为True将以新命令栏替换活动菜单栏,默认值为False。
在本例中,设置“NewBar”命令栏的MenuBar属性为True,以“NewBar”命令栏替换活动菜单栏。
参数Temporary是可选的,设置为True将使新建命令栏为临时命令栏,在关闭应用程序时删除,默认值为False。
在本例中,设置“NewBar”命令栏的Temporary属性为True,使“NewBar”命令栏为临时命令栏,在关闭应用程序时删除。
第15行代码,设置“NewBar”命令栏为可见的。
第16行到95行代码,使用Add方法在“NewBar”命令栏中添加菜单、菜单项及子菜单并设置其各项属性,参阅▲79 。
恢复Excel原有的菜单栏的代码如下:
Sub DelNowBar()
On ErrorResume Next
WithApplication
.CommandBars('Standard').Visible= True
.CommandBars('Formatting').Visible= True
.CommandBars('Stop Recording').Visible= True
.CommandBars('toolbar list').Enabled= True
.CommandBars.DisableAskAQuestionDropdown= False
.DisplayFormulaBar = True
.CommandBars('NewBar').Delete
EndWith
End Sub
代码解析:
DelNowBar过程取消“常用”、“格式”和“停止录制”工具栏的的隐藏,恢复“键入需要帮助的问题”下拉框和编辑栏,删除“NewBar”命令栏。
联系客服