ich habe in meiner Symbolliste als Listenfeld "Blattliste" eingefügt, über dem ich bequem die Tabellenblätter meiner Arbeitsmappe auswählen kann. Dazu habe ich in einer Datei, die bei jedem Excelstart im "Hintergrund" aufgerufen wird, folgendes Makro für das Listenfeld drin.
Sub SheetCombo_OnAction()
Dim cbcb As CommandBarComboBox
On Error Resume Next
Set cbcb = CommandBars.FindControl(Type:=msoControlDropdown, Tag:="Blattliste")
ActiveWorkbook.Sheets(cbcb.Text).Activate
End Sub
Soweit alles ok. Dann hab ich noch ein dazugehöriges Makro als Klassenmodul (siehe unten). Wozu das genau gut ist, weiß ich nicht (hab die Makros mal von irgendwo reinkopiert). Es funktioniert wunderbar, nur bei Dateien, die neben Modulen auch Formulare (in VBA, nicht direkt im Tab.-Blatt) enthalten, funktioniert es nicht. Es bleibt dann immer bei der Programmzeile "For Each sheet In sh.Parent.Sheets" hängen. Kann mir jemand sagen warum und wozu das Klassenmodul-Makro eigentlich dient?
Im Klassenmodul AppClass:
Option Explicit
' es sollen Application-Ereignisse verarbeitet werden
Public WithEvents app As Application
Private Sub app_SheetActivate(ByVal sh As Object)
Dim cbcb As CommandBarComboBox
Dim sheet As Object
Dim i
Set cbcb = Application.CommandBars.FindControl(Type:=msoControlDropdown, Tag:="Blattliste")
cbcb.Clear
'sh.parent liefert ein Workbook-Objekt
For Each sheet In sh.Parent.Sheets
If TypeName(sheet) "Module" Then
cbcb.AddItem sheet.Name
End If
Next
'richtigen Listeneintrag aktivieren
For i = 1 To cbcb.ListCount
If cbcb.List(i) = sh.Name Then cbcb.ListIndex = i: Exit For
Next
End Sub
Für jegliche Hilfe vielen Dank. Ich hoffe, das ist nicht zu knifflig und ich hab es einigermaßen verständlich schildern können.
Grüße von Holger