在excel中,菜单栏内的控件可以有多种类型,但是只有命令按钮控件(msoControlButton)才有控件图形(Face)匹配。
每个图形都有对应的FaceId 属性,如果需要显示所有的命令按钮控件对应的Face图形到单元格中,可以使用如下的代码:
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", "菜单内的控件标题", "菜单内的控件FaceID", "菜单内的控件图形")
iCol = UBound(arr) + 1
oWK.Range("a1").Resize(1, iCol) = arr
i = 2
For Each oCB In Excel.Application.CommandBars
'遍历每个菜单栏
With oCB
'重置菜单栏
.Reset
For Each oCBC In .Controls
'遍历每个控件
sCBName = .Name
sCBNameLocal = .NameLocal
With oCBC
'控件id
sID = .ID
'控件标题
sCBCName = .Caption
'控件类型
iType = .Type
End With
'如果是msoControlButton类型的按钮就有Face图形
If iType = 1 Then
iFaceID = oCBC.FaceId
With oWK
.Cells(i, 1) = sCBName
.Cells(i, 2) = sCBNameLocal
.Cells(i, 3) = sID
.Cells(i, 4) = sCBCName
.Cells(i, 5) = iFaceID
'把图片复制到剪贴板
oCBC.CopyFace
'将图片粘贴到单元格中
.Paste .Cells(i, 6)
.OnAction = "'xyf " & .FaceId & "'"
i = i + 1
End With
End If
Next
End With
Next
oWK.Columns.AutoFit
Excel.Application.ScreenUpdating = True
End Sub
Sub xyf(ByVal iid As Long)
Dim oCBB As CommandBarButton
Set oCBB = Excel.CommandBars.FindControl(ID:=iid)
With oCBB
MsgBox .Caption
MsgBox .FaceId
End With
End Sub


a1v7we