Hallo zusammen ich wieder ^^,
ich habe folgende "Schleife"
Code:
With Worksheets("Tabelle1").Range("F2:F200")
Set c = .Find("SZ", LookIn:=xlValues)
Do
c.Offset(0, -1) = "SZ"
Set c = .FindNext(c)
Loop While Not c Is Nothing
End With
Der Code wird ausgeführt jedoch muss ich ihn stets mit ESC unterbrechen, damit ich weiter an der Liste arbeiten kann.
Woran liegt das?
VG Markus
(24.04.2024, 11:12){Boris} schrieb: [ -> ](siehe Beispiel 1)
Beispiel 1 ist korrekt: Ändert man den Wert der Fundstelle, muss man auf Nothing prüfen. Eine Endlosschleife kann hier nicht entstehen.
Ändert man den Wert der Fundstelle nicht (Beispiel 2), prüft man nur beim Einstieg in die Schleife auf Nothing, danach auf Übereinstimmung mit der Adresse der ersten Fundstelle. Die Prüfung auf Nothing am Ende der Schleife ist also obsolet.
Wenn die Fundstelle Nothing ist, führt der Versuch, die Adresse auszulesen, zwangsläufig zu einem Fehler. Dieser Bock war tatsächlich über Jahrzehnte in der OH (dort war Beispiel 1 mit zusätzlicher Prüfung auf Nothing am Ende der Schleife). Jetzt hat man es endlich korrigiert.
Hi,
natürlich hast Du Recht. Ich hatte in Gedanken noch die Anforderung des TE gespeichert, der ja nicht den Suchbereich verändert sondern die Nachbarzelle mit
c.Offset(0, -1) = "SZ"
Und damit würde der Code auf learn.microsoft natürlich auch endlos laufen (was naturgemäß nicht der Fall ist, wenn die Werte im Suchbereich geändert werden).
Diese klare Differenzierung und Erläuterung vermisse ich schon immer in der OH.
Hallo
Ich baue meine Find Codes immer mit Adr1 = 1. Find Adresse auf. Alternativ geht es auch mit rw = Row als Zeile.
With Worksheets("Tabelle1").Range("F2:F200")
Set C = .Find("SZ", LookIn:=xlValues)
Adr1 = C.Address '1. Find Adresse
Do
C.Offset(0, -1) = "SZ"
Set C = .FindNext©
Loop Until C.Adress = Adr1
End With
mfg Gast 123
(24.04.2024, 12:52)Gast 123 schrieb: [ -> ]immer
Bedeutet in der Hälfte der Fälle falsch. Ich habe eben erläutert, warum.
Was passiert in deinem Code, wenn SZ nie gefunden wird?