分享

VBA常用代码解析(第二十一讲)

 wdmexcel 2015-09-04

 

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:=msoBarTopMenuBar:=TrueTemporary:=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(NamePositionMenuBarTemporary)

参数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”命令栏。


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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多