Lista alla verktygsfälts menyers namn, knappbild och ID-nummer på första nivån


I detta exempel visas hur vi kan läsa in data om samt visa alla verktygsfälten och menyelementen på "första nivån", såväl inbyggda som egenskapade.

Se också Lista alla vertygsfälts kontrollers...

För att se ett exempel som baseras på ID-nummer mm se Infoga egna menyalternativ...


Option Explicit


Sub Visa_Alla_Menyer()
Dim cbKontroll As CommandBarControl
Dim cbVFalt As CommandBar
Dim i As Integer

On Error Resume Next
'Först tar vi bort eventuellt tidigare arbetsblad och lägger
'till ett nytt
With ActiveWorkbook
      .Sheets("Kontroller första nivån").Delete
      .Sheets.Add
End With


ActiveSheet.Name = "Kontroller första nivån"
Application.ScreenUpdating = False

'Här tilldelas de första cellerna i kolumnerna A:D ledtext
'och formatering
Cells(1, 1).Value = "Menyer"
Cells(1, 2).Value = "Kontroll"
Cells(1, 3).Value = "Knappbild"
Cells(1, 4).Value = "ID"
Cells(1, 1).Resize(1, 4).Font.Bold = True

i = 2

For Each cbVFalt In CommandBars
     Application.StatusBar = _ 

     "Arbetar med " & cbVFalt.NameLocal
     Cells(i, 1).Value = cbVFalt.NameLocal
    
'Egenskapen NameLocal ger de svenska orden
      'för menyers och menyelementens namn  
     i = i + 1

          'Här hämtas önskade egenskaper in 
          'för respektive element
          For Each cbKontroll In cbVFalt.Controls
              Cells(i, 2).Value = cbKontroll.Caption
              cbKontroll.CopyFace

                 'Felhanteringsrutin för knappbild              
              If Err.Number = 0 Then
                 ActiveSheet.Paste Cells(i, 3)
                 Cells(i, 3).Value = cbKontroll.FaceId
              End If

              'Varje inbyggt menyelement har ett unik ID, 
              'vilket kan anropas i andra procedurer.
              'Egna menyelement har alltid ID-nummer 1   
              Cells(i, 4).Value = cbKontroll.ID
              Err.Clear
              i = i + 1
          Next cbKontroll
Next cbVFalt

'Automatisk justering av kolumnbredd
Range("A:C").EntireColumn.AutoFit

With Application
   .ScreenUpdating = True 
   .StatusBar = False
'Återställer statusfältet
End With
End Sub