如何用vba单击执行excel、word的内置菜单命令?

在 如何用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的内置菜单命令的原理和思路是一样的。

       

发表评论