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”命令栏。 |
|
来自: wdmexcel > 《Excel Vba》