Hi Fedjo,
ich hatte den Code urprünglich getestet ohne ListBox, und da läuft er ohne Fehler - auch in 2007. Jetzt habe ich mal eine ListBox eingebaut und erhalte den Fehler ebenfalls. Beim Testen des Codes im Einzelschrittmodus fällt folgendes auf: der Code wird 2 mal durchlaufen - zuerst bis zur Zeile für das Einblenden und dann wird sofort wieder zum Anfang der Prozedur gesprungen. Und beim 2. Durchlauf wird dann der Fehler ausgelöst - offensichtlich wird durch Excel in den fest eingetragenen ListFillRange eingegriffen und möglicherweise wird dadurch kurzzeitig der Entwurfsmodus eingeschaltet. In solchen Fällen vergisst Excel alle bereits benutzen Variablen - so auch die Excel-internen Cells, Rows usw., was dann zu dem Fehler führt.
Fazit: fülle deine ListBox nicht mittels Festlegung von ListFillRange, sondern entweder, indem du z.B. mit AddItem die Werte einzeln zuweist oder sie in ein Array als Zellbereich einliest und dann der List zuweist. Letzteres ginge z.B. mit folgendem Code im Codemodul des Tabellenblattes:
Option Explicit
Dim arrWerte
Private Sub ListBox4_Click()
Dim Zelle As Range
Application.ScreenUpdating = False
Cells.Rows.EntireRow.Hidden = False
For Each Zelle In Range("D4:D" & Range("D65536").End(xlUp).Row)
If Zelle.Text <> ListBox4.Text Then Zelle.Rows.EntireRow.Hidden = True
Next
End Sub
Private Sub ListBox4_GotFocus()
arrWerte = Worksheets("Tabelle2").Range("A1:A50")
ListBox1.List = arrWerte
End Sub
Den Wertebereich für das Array musst du natürlich an deine Gegebenheiten anpassen.
Noch ein Tipp: Die Verwendung von Range("D65536").End(xlUp).Row für das Ermitteln der letzten belegten Zeile ist bei Excel2007 nicht sinnvoll, da dort ja mehr Zeilen als 65536 existieren.
Bis später,
Karin