ich habe hier gerade ein merkwürdiges Problem :
In einer Mappe existieren die Tabellenblätter "Liste" und "Formular".
Die "Liste" enthält mehrere Datenzeilen, darunter in Spalte C eine nicht eindeutige "MNr".
Zu jeder MNr. gibt es eine oder mehrere FNr. (Spalte F).
Ich habe nun bereits programmiert, dass bei Aktivierung des Blattes "Formular" in Zelle B1 eine Gültigkeitsliste erscheint, die alle MNr. aus Blatt "Liste" ohne redundante Einträge enthält.
Bei Auswahl einer MNr aus der Gültigkeitsliste soll in Zelle D1 eine weitere Gültigkeitsliste mit allen zu dieser MNr. passenden FNr. erstellt werden. Dies funktioniert auch grundsätzlich (später soll auch der umgekehrte Weg programmiert werden, doch das spielt hier keine Rolle).
Da die Liste mehrere hundert Datensätze beinhalten kann, habe ich das Befüllen der Gültigkeitsliste (im blatt "Formular") nicht per Schleife über alle Datensätze der "Liste" gelöst, sondern die "Liste" zuvor mit der in B1 ausgewählten MNr. gefilter (Autofilter). Es müssen nun also immer nur die sichtbaren Zellen der Spalte in die Gültigkeitsliste aufgenommen werden.
Diese Methode hat sich in meinen Projekten bereits mehrfach bewährt und funktioniert auch wesentlich schneller als eine Schleife über ALLE Datenzeilen !
Um nur die sichtbaren Zeilen (also : Datenzeilen, die dem Autofilter-Kriterium entsprechen) auszuwerten, verwende ich folgende Codezeile (in Zeile 8 der Spalte F steht der erste mögliche Datensatz, MNr. in Spalte C ist in allen Zeilen gefüllt !) :
For Each rngZelle In .Range("F8:F" & .Cells(Rows.Count, 3).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
Das funktioniert im aktuellen Projekt auch zu ca. 90% aber manchmal "hängt" die Schleife in einer (fast) endlosen Schleife fest :-(
Der Grund ist offenbar, dass Range("F8:F" & .Cells(Rows.Count, 3).End(xlUp).Row).SpecialCells(xlCellTypeVisible) manchmal falsch interpretiert wird :
Wenn durch das Autofilterkriterium z.B. nur die Zeilen 9 und 11 sichtbar sind, dann sollte obige Anweisung den Bereich F9,F11 liefern - was auch meist funktioniert.
Nur werden leider auch manchmal ganze Zeilen ($9:$9,$11:$11) bzw. gesamte Zellbereiche ($1:$7,$9:$9,$11:$65536) als Ergebnis geliefert, so dass die Schleife jede einzelne Zeile in diesen Bereichen durchsucht, wodurch die scheinbare "Endlosschleife" (so "endlos" ist sie ja gar nicht, da es ja "nur" 16.776.704 Zellen sind ;-) entsteht.
Anbei ein kleines Beispiel mit dem gesamten Code ("Daten - Gültigkeit" in den grünen Feldern des Blattes "Formular") :
https://www.herber.de/bbs/user/62976.xls
Hat jemand eine Erklärung für dieses Verhalten ? - Kennt jemand evtl. eine bessere Lösung, alle sichtbaren Zellen einer gefilterten Tabelle zu durchlaufen ?
Danke und MAAAHLZEIT,
Gruß, NoNet