如何用vba列举word中所有的内置菜单栏、工具栏、菜单命令?

在office 2007(含)版本以前,office的界面都是菜单形式的。

各种命令组合在一起组成了特定的菜单栏、工具栏。

虽然office 2007(含)版本以后,菜单栏被功能区替代,但是内置的菜单命令依然存在,而且功能区中的命令仍然使用的是之前的菜单命令。

如果要获取所有的office软件的内置菜单命令,可以遍历CommandBars 集合对象,访问所有的CommandBar对象,获取其中的所有菜单命令CommandBarControl

基于上述知识,如果要在word文档中列出word应用程序中所有的内置菜单栏、工具栏的名称以及对应的菜单命令,可以使用以下的代码:

Sub QQ1722187970()
    Dim oDoc As Document
    Set oDoc = Word.ActiveDocument
    Dim oCB As CommandBar
    Dim oCBC As CommandBarControl
    Dim oT As Table
    Dim arr()
    K = 1
    For Each oCB In Word.Application.CommandBars
        For Each oCBC In oCB.Controls
            '此处没有列举弹出式的菜单
            ReDim Preserve arr(1 To 6, 1 To K)
            arr(1, K) = oCB.Name
            arr(2, K) = oCB.NameLocal
            arr(3, K) = oCBC.Caption
            arr(4, K) = oCBC.ID
            arr(5, K) = oCBC.Type
            arr(6, K) = oCBC.DescriptionText
            K = K + 1
        Next
    Next
    With oDoc
        For Each oT In .Tables
            oT.Delete
        Next
        Set oT = .Tables.Add(.Range, K, 6)
        With oT
            .Style = "网格型"
            .Cell(1, 1).Range.Text = "命令栏名称"
            .Cell(1, 2).Range.Text = "命令栏中文名称"
            .Cell(1, 3).Range.Text = "命令按钮的名称"
            .Cell(1, 4).Range.Text = "命令按钮的id"
            .Cell(1, 5).Range.Text = "命令按钮的类型"
            .Cell(1, 6).Range.Text = "命令按钮的描述"
            For j = 1 To 6
                For i = 1 To K - 1
                    .Cell(i + 1, j).Range.Text = arr(j, i)
                Next i
            Next j
        End With
    End With
    Set oT = Nothing
    Set oDoc = Nothing
End Sub

结果如下图所示:

从上图可以看出,我们可以用vba代码将所有的word内置菜单的命令列举出来,同时可以看到每个菜单命令对应的说明,从而方便快速地找到要的菜单命令。

       

发表评论