Hi Michael,
das Problem ist die automatische Aktualisierung der Liste in der ComboBox. Wie du mit dem nachstehenden Code sehen kannst wird die Liste erst dann aktualisiert wenn man in der Liste schon was ausgewählt hat, d.h. man hat vielleicht ein Blatt ausgewählt daß es gar nicht mehr gibt.
Um eine annähernde Aktualisierung könntest du im Modul „DieseArbeitsmappe“ sowas eintragen:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Call nn
End Sub
’
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call nn
End Sub
’
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Call nn
End Sub
und da gibts ja noch mehr Ereignisse für ein Sheet, die kannst du ja noch dranhängen.
SheetCalculate kann kritisch werden bei großen Tabellen mit vielen Berechnungen aus Performancegründen, mußte testen.
Alternativ zu dem Ganzen, schmeiß die Combobox wieder raus, ist sowieso Verschwendung dafür eine ganze Zeile zu benutzen und setze stattdessen oben z.B. neben das Fragezeichen eine Schaltfläche.
Diese Schaltfläche ruft dann eine List- oder Combobox auf, oder eine Userform auf der sich die Listbox befindet, die immer aktuell ist
Mit Riesemaufwand und noch unklar ob es deine Problematik zu 100% abdecken kann könnte man mittels API den Mauszeiger überwachen ob er sich unten über den Tabellenregistern befindet und sobald er diesen Bereich wieder verläßt könnte man dies benutzen um die Liste zu aktualisieren.
Das bedingt m.E. aber daß da ein Timer permanent mitläuft und permanent die Mausposition abfragt. D.h. der Timer muß beim Mappenöffnen gestartet werden , dies bedingt daß man den User dazu zwingen muß daß er die Mappe mit aktivierten Makros öffnen muß, ansonsten kriegt er nur ein leeres Baltt zu sehen.
Es gäbe noch andere Vorgehensweisen, aber alle sehr aufwendig. Man könnte unten die Tabellenrgister ausblenden und eigene Schaltflächen basteln die sie ersetzen. Dazu muß man natürlich auch Extras–Optionen deaktivieren damit keiner dort die Tabellenregister wieder einblenden könnte.
Alles viel zu viel Aufwand *find*, aber wenn du dich daran versuchen willst, bitteschön, durch solche Aufgaben wächst man in Vba-Hinsicht.
Ein Tipp, gewöhne dir in deinem Interesse an immer Option Explicit zu benutzen.
Gruß
Reinhard
Option Explicit
'
Sub BeispielBar()
Dim BarName As String, WS As Worksheet
BarName = "meine Buttons"
Dim myBar As CommandBar
Dim box As CommandBarComboBox
On Error Resume Next
Application.CommandBars(BarName).Delete
Set myBar = \_
Application.CommandBars.Add(BarName, msoBarTop, False, True)
myBar.Visible = True
Set box = myBar.Controls.Add(Type:=msoControlComboBox)
box.Caption = "meine Box"
box.OnAction = "nn"
For Each WS In Worksheets
If (WS.Visible = xlSheetVisible) Then box.AddItem (WS.Name)
Next WS
End Sub
'
Sub nn()
Dim WS As Worksheet
With Application.CommandBars("meine Buttons").Controls("meine Box")
.Clear
For Each WS In Worksheets
If (WS.Visible = xlSheetVisible) Then .AddItem (WS.Name)
Next WS
MsgBox "huhu"
End With
End Sub