打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA常用代码解析(第二十讲)

 

080 在菜单栏指定位置添加菜单

除了可以在工作表菜单中添加菜单项外,还可以在工作表菜单栏的指定位置添加菜单,如下面的代码所示。

Sub AddNewMenu()

DimHelpMenu As CommandBarControl

DimNewMenu As CommandBarPopup

WithApplication.CommandBars('Worksheet menu bar')

.Reset

Set HelpMenu = .FindControl(ID:=.Controls('帮助(&H)').ID)

If HelpMenu Is Nothing Then

Set NewMenu = .Controls.Add(Type:=msoControlPopup)

Else

Set NewMenu = .Controls.Add(Type:=msoControlPopup_

Before:=HelpMenu.Index)

End If

With NewMenu

.Caption = '统计(&S)'

With .Controls.Add(Type:=msoControlButton)

.Caption = '输入数据(&D)'

.FaceId = 162

.OnAction = ““

End With

With .Controls.Add(Type:=msoControlButton)

.Caption = '汇总数据(&T)'

.FaceId = 590

.OnAction = ““

End With

End With

EndWith

SetHelpMenu = Nothing

SetNewMenu = Nothing

End Sub

代码解析:

AddNewMenu过程使用Add方法在工作表“帮助”菜单前添加一个标题为“统计”的菜单和两个菜单项。

6行代码,使用FindControl方法在工作表菜单栏中查找“帮助”菜单。应用于CommandBars对象的FindControl方法返回一个符合指定条件的CommandBarControl对象。语法如下:

expression.FindControl(TypeIdTagVisibleRecursive)

参数expression是必需的,返回一个CommandBars对象。

参数Type是可选的,要查找控件的类型。

参数Id是可选的,要查找控件的标识符。

参数Tag是可选的,要查找控件的标记值。

参数Visible是可选,如果该值为True,那么只查找屏幕上显示的命令栏控件。默认值为False

参数Recursive是可选的,如果该值为True,那么将在命令栏及其全部弹出式子工具栏中查找。此参数仅应用于CommandBar对象。默认值为False

如果没有控件符合搜索条件,那么FindControl方法返回Nothing

7行到第12行代码,如果工作表菜单栏中存在“帮助”菜单,将“统计”菜单添加到“帮助”菜单之前,否则添加到工作表菜单栏末尾。

12行到第25行代码,在“统计”菜单中添加两个子菜单并设置其各种属性。运行AddNewMenu过程,将在工作表菜单栏的“帮助”菜单之前添加一个“统计”菜单。

081 屏蔽和删除工作表菜单

如果不希望用户使用工作表菜单栏的部分功能,可以把菜单或菜单项屏蔽或删除,如下面的代码所示。

Sub Shibar()

WithApplication.CommandBars('Worksheet menu bar')

.Reset

.Controls('工具(&T)').Controls('(&M)').Enabled = False

.Controls('数据(&D)').Delete

EndWith

End Sub

代码解析:

Shibar过程屏蔽“工具”菜单中的“宏”菜单项,删除菜单栏中的“数据”菜单。

3行代码,使用Reset方法重置工作表菜单栏。

4行代码,将“宏”菜单项的Enabled属性设置为False,使之无效。

Enabled属性决定命令栏或命令栏控件是否激活,如果将该属性设置为 False,那么该菜单项将无效。

5行代码,使用Delete方法将“数据”菜单从工作表菜单栏中删除。

Delete方法应用于命令栏或命令栏控件时,从集合中删除指定对象,语法如下:

expression.Delete(Temporary)

参数expression是必需的,返回命令栏或命令栏控件对象之一。

参数Temporary是可选的,设置为True将从当前会话中删除控件,应用程序在下次会话时将再次显示控件。

运行Shibar过程,将屏蔽工作表“工具”菜单中的“宏”菜单项和删除工作表菜单栏中的“数据”菜单。

082 改变系统菜单的操作

利用VBA甚至可以改变系统菜单的默认操作,使之达到自定义菜单的效果,如下面的代码所示。

Dim WithEvents Saveas As CommandBarButton

Private Sub Workbook_Open()

SetSaveas = Application.CommandBars('File').Controls('另存为(&A)...')

End Sub

Private Sub Saveas_Click(ByVal Ctrl As Office.CommandBarButtonCancelDefault As Boolean)

CancelDefault= True

MsgBox'本工作簿禁止另存!'

End Sub

代码解析:

1行代码,在模块级别中使用关键词WithEvents声明变量Saveas是用来响应由CommandBarButton对象触发事件的对象变量。

2行到第4代码工作簿的Open事件过程,在工作簿打开时将变量Saveas赋值为系统菜单的“另存为”菜单。

因为在声明变量Saveas时使用了关键词WithEvents,不能同时使用New关键词隐式地创建对象,所以在使用变量Saveas之前,必须使用Set语句将变量赋值为一个已有对象。

5行到第8代码变量Saveas的单击事件过程,改变系统菜单“另存为”的默认操作。

变量SaveasClick事件在用户单击系统菜单“另存为”时发生,语法如下:

Private Sub CommandBarButton_Click(ByValCtrl As CommandBarButton

ByVal CancelDefaultAs Boolean)

参数Ctrl是必需的,指示初始化该事件的CommandBarButton控件。

参数CancelDefault是必需的,Boolean类型,如果执行了与CommandBarButton控件关联的默认操作,该值为False。除非其他过程或加载项取消了此操作。

67行代码,将CancelDefault参数设置为True,使单击“另存为”菜单时并不执行默认操作而只显示一个消息框。

将工作簿保存、关闭后,重新打开,单击“另存为”菜单并不执行默认操作,只显示一个消息框。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
我的菜单我做主,VBA代码在EXCEL菜单中添加自定义新项
VBA自定义菜单和菜单栏(二)【Access软件网】
VBA自定义菜单和菜单栏
对MicrosoftOffice命令栏进行更多编程(1)
如何在Excel中自定义菜单和菜单栏
Excel vba通过Application.CommandBars.FindControl的方法禁...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服