在如何用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枚举对照。
运行程序后的结果如下:
发表评论