如何用vba返回excel所有的菜单命令栏控件的id、标题、类型等信息?

如何用vba代码返回excel应用程序中的所有内置菜单命令栏的名称? 一文中我们介绍了如何用vba返回excel应用程序的所有内置菜单命令栏的名称。

今天我们介绍如何用vba返回excel所有的菜单命令栏控件的id、标题、类型等信息。

在vba中CommandBar对象表示excel中的菜单对象,CommandBarControl对象表示菜单中的控件对象。其中Controls控件集合对象是CommandBar对象的属性,也就是如果要遍历每个控件,首先要遍历每个CommandBar对象,然后通过Controls属性遍历每个控件。

代码如下:

Sub QQ1722187970()
    Excel.Application.ScreenUpdating = False
    Dim oCB As CommandBar
    Dim oCBC As CommandBarControl
    Dim oWK As Worksheet
    Set oWK = ActiveSheet
    oWK.Cells.Clear
    Dim arr
    Dim iCol As Integer
    arr = VBA.Array("菜单英文名称", "菜单中文名称", "菜单内的控件ID", "菜单内的控件标题", "菜单内的控件类型")
    iCol = UBound(arr) + 1
    oWK.Range("a1").Resize(1, iCol) = arr
    i = 2
    For Each oCB In Excel.Application.CommandBars
        '遍历每个菜单栏
        With oCB
            For Each oCBC In .Controls
                '遍历每个控件
                sCBName = .Name
                sCBNameLocal = .NameLocal
                With oCBC
                    '控件id
                    sID = .ID
                    '控件标题
                    sCBCName = .Caption
                    '控件类型
                    iType = .Type
                End With
                    With oWK
                        .Cells(i, 1) = sCBName
                        .Cells(i, 2) = sCBNameLocal
                        .Cells(i, 3) = sID
                        .Cells(i, 4) = sCBCName
                        .Cells(i, 5) = iType
                        i = i + 1
                    End With
            Next
        End With
    Next
    oWK.Columns.AutoFit
    Excel.Application.ScreenUpdating = True
End Sub

其中控件的类型可以参考MsoControlType枚举对照。

运行程序后的结果如下:

       

发表评论