在 如何用vba列举word中所有的内置菜单栏、工具栏、菜单命令?一文中介绍了如何通过VBA列举word应用程序中的所有内置的菜单栏、工具栏、以及对应的命令。
在 如何用vba返回excel所有的菜单命令栏控件的id、标题、类型等信息? 一文中介绍了如何通过VBA列举excel应用程序中的所有内置的菜单栏、工具栏、以及对应的命令。
在某些情况下需要直接调用、执行某个菜单命令。
比如要打开word应用程序中的“段落”设置对话框,如下图所示:
为了要打开这个对话框,需要执行这个对话框对应的命令。
为了执行这个对话框对应的命令,需要找到这个命令对应的idMso或ID。
但是idMso无法通过程序列举出来,而ID可以通过上述文章的代码列举出来。
当找到了这个命令对应的ID,可以使用CommandBars对象的FindControls方法或CommandBars对象的FindControl方法获取这个命令按钮,然后再用CommandBarControl 对象的Execute方法执行对应的菜单命令。
它的语法如下:
expression.FindControls (Type, Id, Tag, Visible)
其中Type表示命令的类型,id为命令的id,Tag为命令的备注,Visible表示是否只查找可见的命令。
比如上图中的“段落”对话框,通过查找可以找到其对应的命令ID和命令描述如下:
从而可以使用如下的代码执行这个命令:
Sub QQ1722187970() Dim oCBCS As CommandBarControls Dim oCBC As CommandBarControl '直接找到这个命令 Set oCBC = Word.ActiveDocument.CommandBars.FindControl(Type:=msoControlButton, ID:=779) oCBC.Execute '先找到所有类似的命令,然后判断执行 Set oCBCS = Word.ActiveDocument.CommandBars.FindControls(Type:=msoControlButton, ID:=779) For Each oCBC In oCBCS If oCBC.DescriptionText Like "*外观*" Then oCBC.Execute Exit For End If Next End Sub
以上虽然介绍的是执行word的内置菜单命令,执行excel的内置菜单命令的原理和思路是一样的。
发表评论