HERBERS Excel-Forum - die Beispiele

Thema: CommandBar in Abhängigkeit vorhandener Makros erstellen

Home

Gruppe

VBE

Problem

Wie kann ich beim Öffnen einer Arbeitsmappe automtisch eine Symbolleiste für alle in einem bestimmten Modul vorhandenen Makros erstellen lassen?

Lösung
Geben Sie den Ereigniscode in das Klassenmodul der Arbeitsmappe ein.
ClassModule: DieseArbeitsmappe

Private Sub Workbook_BeforeClose(Cancel As Boolean)
   On Error Resume Next
   Application.CommandBars("AktuelleMakros").Delete
   On Error GoTo 0
End Sub

Private Sub Workbook_Open()
   Dim oBar As CommandBar
   Dim oBtn As CommandBarButton
   Dim arr() As String
   Dim iCounter As Integer
   On Error Resume Next
   Application.CommandBars("AktuelleMakros").Delete
   On Error GoTo 0
   Set oBar = Application.CommandBars.Add( _
      Name:="AktuelleMakros", _
      Position:=msoBarTop, _
      MenuBar:=False, _
      temporary:=True)
   arr = GetMacros
   For iCounter = 1 To UBound(arr)
      Set oBtn = oBar.Controls.Add
      With oBtn
         .Caption = "Makro Nr. " & iCounter
         .OnAction = "MacroNo" & iCounter
         .Style = msoButtonCaption
         .FaceId = 70 + iCounter
      End With
   Next iCounter
   oBar.Visible = True
End Sub

StandardModule: basMain

Sub MacroNo1()
   MsgBox "Ich bin Makro Nr. 1"
End Sub

Sub MacroNo2()
   MsgBox "Ich bin Makro Nr. 2"
End Sub

Sub MacroNo3()
   MsgBox "Ich bin Makro Nr. 3"
End Sub

Sub MacroNo4()
   MsgBox "Ich bin Makro Nr. 4"
End Sub

Sub MacroNo5()
   MsgBox "Ich bin Makro Nr. 5"
End Sub

StandardModule: basFunction

Function GetMacros()
   Dim arrMacros() As String
   Dim var As Variant
   Dim iRow As Integer, iCounter As Integer
   With ThisWorkbook.VBProject _
      .VBComponents("basMain").CodeModule
      For iRow = 1 To .CountOfLines
         If .ProcOfLine(iRow, 0) > "" Then
            If iCounter = 0 Then
               iCounter = iCounter + 1
               ReDim Preserve arrMacros(iCounter)
               arrMacros(iCounter) = .ProcOfLine(iRow, 0)
            Else
               var = Application.Match(.ProcOfLine(iRow, 0), arrMacros, 0)
               If IsError(var) Then
                  iCounter = iCounter + 1
                  ReDim Preserve arrMacros(iCounter)
                  arrMacros(iCounter) = .ProcOfLine(iRow, 0)
               End If
            End If
         End If
      Next iRow
   End With
   GetMacros = arrMacros
End Function

Beiträge aus dem Excel-Forum zu den Themen VBE und Prozedur

Ereignisprozedur suche Taschenrechner in VBE
Ereignisprozedur f. Multipage-Reiter Prozedur in neues Blatt/Tabelle einfügen
Makros zulassen mit VBA Prozedur Beschriftungstext einer Schaltfläche an Prozedur
Text aus Zelle als Bedingung in Prozedur Zeitgesteuerte Prozedur funktioniert nicht...
Prozedur zu groß Fehler bei Abhandlung der Prozedur
Eine große Prozedur in zwei teilen aber wie? VBA - Prozedur
Prozedur verkürzen oder teilen? VBA bringt Prozedur-Fehler
VBE Optionen setzen Name der laufenden Prozedur
Prozeduren vor dem Speichern aus Tabelle löschen Prozedurnamen auslesen
Prozedurname aus Variable Erweiterung der VBE
Prozedur fuer mehrere Arbeitsblaetter wiederholen Simple Prozedur - Wo ist der Fehler?
vbeplus Variablen in anderer Prozedur aufrufen
Prozedur bei Worksheet_Activate tut nicht Worksheet_Activate() Prozedur
Teil einer rekursiven Prozedur auslagern Ereignisprozeduren automatisiert VBE
Automatisierungsfehler Codename VBE Verwendung Addin vbeplusde
lange Bearbeitungszeit einer Prozedur Prozedur macht was sie will...
Fehler beim Kompilieren - Außerhalb Prozedur.... prozedur aufrufen
Frage Archivbeitrag - Schreibschutz Benutzerrechte Prozedur in prozedur
Prozedur bei Klick auf Grafik auslösen Fehler in Codeprozedur
Prozedur zu lang Außerhalb einer Prozedur ungültig
Prozedur bei Wechsel Hintergrundfarbe ausführen Bei erster Makroausführung öffnet sich VBE im Debu
VBE-Kontextmenü "Definition" Prozedur dauert zu lange
Objekt an Prozedur übergeben Prozedur automatisch ausführen
2 Prozeduren ausführen Listbox breite einstellen in einer prozedur
aktuellen Prozedurnamen für Fehler-Log automatisch