VBE菜单——CommandBars对象

2020-07-28 14:28:09 浏览数 (1)

我们在VBA编辑器里使用的菜单:

这些在VBA里也提供了相应的对象让我们去操作,这个就是CommandBars对象。

CommandBars对象

在VBIDE库下面的对象里,找到VBE对象,它下面就有CommandBars属性,这个属性就是菜单相关的,再点击下面:

会跳转到Office库下面的CommandBars对象,也就是说,这个菜单其实是Office通用的一种东西,也是微软制作好了给使用者调用就可以的:

你还可以点击下面的那个绿色的Office,跳转出来的就是:

代码语言:javascript复制
Library Office
    C:Program Files (x86)Common FilesMicrosoft SharedOFFICE14MSO.DLL
    Microsoft Office 14.0 Object Library

说明Office库其实就是这个MSO.DLL(前面的是安装路径,可以会不一样)的东西,所有操作Office库对象的东西,其实都是调用这个dll。

你还可以打开一个Word,或者其他有VBA的Office套件,同样进入对象浏览器,查看这个Office库,它们指向的都是这个MSO.DLL。

我们写个代码遍历一下这个对象,看看在VBA编辑器里的这个菜单对象:

代码语言:javascript复制
Sub testCMDB()
    Dim cmd As CommandBar
    
    For Each cmd In Application.VBE.CommandBars
        Debug.Print cmd.Name, cmd.NameLocal
    Next
End Sub

输出:

代码语言:javascript复制
菜单条        菜单条
标准          标准
编辑          编辑
调试          调试
用户窗体      用户窗体
Document      文档
Project Window Insert       Project Window Insert
Toggle        Toggle
Code Window   Code Window
Code Window (Break)         Code Window (Break)
Watch Window  Watch Window
Immediate Window            Immediate Window
Locals Window Locals Window
Project Window              Project Window
Project Window (Break)      Project Window (Break)
Object Browser              Object Browser
MSForms       MSForms
MSForms Control             MSForms Control
MSForms Control Group       MSForms Control Group
MSForms Palette             MSForms Palette
MSForms Toolbox             MSForms Toolbox
MSForms MPC   MSForms MPC
MSForms DragDrop            MSForms DragDrop
Toolbox       Toolbox
Toolbox Group Toolbox Group
Property Browser            Property Browser
Property Browser            Property Browser
Docked Window Docked Window
Task Pane     任务窗格
               
Property Editor             属性编辑器
Office Clipboard            Office 剪贴板
XML Source    XML 源
Research      信息检索
XML Document  XML 文档
Signatures    签名
Document Actions            文档操作
Clip Art      剪贴画
Selection and Visibility    选择和可见性
Document Management         文档管理
Document Updates            文档更新
Mail Merge Panes            邮件合并窗格
Fax Service   传真服务
Meeting Workspace           会议工作区
Attachment Options          附件选项
Accessibility Checker       辅助功能检查器
Clipboard     剪贴板
Envelope      信封
System        系统
Online Meeting              联机会议

看到这个输出,可能和预想的不大一样吧,预想输出应该是:

代码语言:javascript复制
文件(&F)
编辑(&E)
视图(&V)
插入(&I)
格式(&O)
调试(&D)
运行(&R)
工具(&T)
外接程序(&A)
窗口(&W)
帮助(&H)

这个的原因是什么呢?

其实看到这几个:

代码语言:javascript复制
标准          标准
编辑          编辑
调试          调试
用户窗体      用户窗体

我们应该能够想到,在菜单的空白处,点击右键的时候,出来的就是这个:

这不正好一样吗,所以我们可以猜测,VBA编辑器里的菜单文件(&F)、编辑(&E)这些,其实不是CommandBars对象,他们应该是CommandBars对象的子对象,也就是CommandBarControl对象,使用代码再遍历一下CommandBars(1)试试:

代码语言:javascript复制
Sub testCMDB1()
    Dim cmd As CommandBarControl
    
    For Each cmd In Application.VBE.CommandBars(1).Controls
        Debug.Print cmd.Caption
    Next
End Sub

这下输出就对了。

0 人点赞