Hi
wenn man mit dem .FindNext arbeitet, muss man drei Problemfälle unterscheiden:
a) alle FundZellen werden gelöscht oder verändert (so wie im Hilfebeispiel)
dann muss die Abbruchprüfung lauten:
- Code: Alles auswählen
Loop While c is Nothing
die Prüfung
c.Address <> firsaddress darf nicht erfolgen, weil sie dann einen Fehlerabbruch bewirkt
b) alle FundZellen bleiben unverändert erhalten (die Veränderungen finden in anderen Zellen statt) und es werden keine Zeilen gelöscht
dann muss die Abbruchprüfung lauten:
- Code: Alles auswählen
c.Address <> firstaddress
die Prüfung
c is Nothing kann man dann in der Schleife weglassen, weil sie nie wahr wird (sie muss nur einmalig vor der Schleife stattfinden, um zu prüfen ob die Schleife überhaupt gestartet werden muss)
schwieriger ist Fall c:
c) die Fundzellen können abhängig von anderen Bedingungen gelöscht oder verändert werden, die können aber auch erhalten bleiben
in diesem Fall braucht man in der Schleife beide Prüfungen:
- alle Fundstellen entfernt (c is Nothing)
- Schleife beginnt wieder von vorne. das
Loop while c.Address <> fristaddress ist hierbei aber ungeeignet, denn es könnte ja sein, dass diese Fundstelle gelöscht oder verändert wurde, und dann ist es eine Endlosschleife.
die Prüfung auf c is Nothing muss aber dann zuerst erfolgen, um Fehlerabbrüche zu vermeiden.
- Code: Alles auswählen
Sub test()
Dim c As Range
Dim ZeileLetzterFund As Long
With Worksheets(1).Range("A:A")
Set c = .Find(2, LookIn:=xlValues)
If Not c Is Nothing Then
ZeileLetzterFund = c.Row
Do
If c.Row Mod 2 = 0 Then c.Value = 5
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
If c.Row <= ZeileLetzterFund Then Exit Do
ZeileLetzterFund = c.Row
Loop
End If
End With
End Sub
Gruß Daniel