Ich habe genau das gleiche Problem gehabt, ich bin nach viel (sehr viel) Probiererei aber drauf gekommen. Hier mal meine Prozeduren:
Public Sub LeistenAnAus()
'Funktion: Schaltet die Menü und Symbolleisten aus, checkt vorher,
' welche eingeschaltet sind
' die aktiven Leisten werden im Array leisten(200) gemerkt
'
'Bemerkung(en): -
'© 2002, A.Gelezun
If DieseArbeitsmappe.leistenan = True Then
DieseArbeitsmappe.symanz = 0 ' Anzahl der am Anfang sichtbaren Leisten insgesamt wird hier gemerkt
For i = 1 To Application.CommandBars.Count
Select Case Application.CommandBars(i).Type
Case 0 ' "Symbolleiste"
If Application.CommandBars(i).Visible = True Then
DieseArbeitsmappe.symanz = DieseArbeitsmappe.symanz + 1 ' hochzählen
leisten(DieseArbeitsmappe.symanz) = Application.CommandBars(i).Index
Set cb = Application.CommandBars(i)
cb.Visible = False ' aus
End If
Case 1 ' "Menüleiste"
If Application.CommandBars(i).Visible = True Then
DieseArbeitsmappe.symanz = DieseArbeitsmappe.symanz + 1 ' hochzählen
leisten(DieseArbeitsmappe.symanz) = Application.CommandBars(i).Index
Set cb = Application.CommandBars(i)
cb.Enabled = False ' aus
End If
End Select
Next i
DieseArbeitsmappe.leistenan = True
Else
For i = 1 To DieseArbeitsmappe.symanz ' Anzahl am Anfang aktiver Leisten
Application.CommandBars(leisten(i)).Enabled = True ' an
Application.CommandBars(leisten(i)).Visible = True ' an
Next i
DieseArbeitsmappe.leistenan = True
End If
End Sub
Mit dieser Prozedur werden die Symbolleisten, die gerade vorhanden sind, ausgeblendet. Auch die Menüleiste wird unsichtbar gemacht (wird in der Proc extra behandelt, Case 1...) . In der Variablen DieseArbeitsmappe.Symanz, wird die Anzahl der aktiven Symbolleisten gespeichert, in der lokalen Variablen leisten(200) werden die Symbolleisten-Indizes gesichert. Am Ende setze ich für mein Programm ein Flag (DieseArbeitsmappe.leistenan) ob die Dinger an oder aus sind. Bei einem Aufruf , wo leistenan=True ist, werden die Leisten wieder eingeschaltet, die zuvor ausgeschaltet wurden.
Jetzt wird meine Leiste eingeschaltet:
Public Sub SymLeiste()
'Funktion: Erzeugt und schaltet meine Symbolleiste ein und aus
'
'Bemerkung(en): -
'© 2002, A.Gelezun
Dim sl As CommandBar
Dim sls As CommandBarButton
For Each sl In Application.CommandBars ' Nachsehen, ob die Leiste da ist und auch sichtbar
If sl.Name = "Meine Leiste" Then
If sl.Visible = True Then leistean = True ' ja, dann leistean=true
End If
Next sl
If leistean = False Then ' Leiste nicht sichtbar
Set sl = Application.CommandBars.Add("Meine Leiste")
On Error Resume Next
Set sls = sl.Controls.Add(Type:=msoControlButton, ID:=3)
With sls
.Style = msoButtonIconAndCaption
.Caption = "Speichern"
End With
Set sls = sl.Controls.Add(Type:=msoControlButton, ID:=4)
With sls
.Style = msoButtonIconAndCaption
.Caption = "Drucken"
End With
Else
Set sl = Application.CommandBars("Meine Leiste")
On Error Resume Next
sl.Delete
leistean = False
End If
End Sub
(Der Else-Zweig schaltet die erzeugte Leiste wieder aus).
Falls Du noch Probleme hast, dann melde dich per Mail bei mir...dann kann ich Dir vielleicht eine Beispiel-Tabelle schicken.
Gruß
Andreas