Clever-Excel-Forum

Normale Version: Schleife Endet nicht (.Find Method)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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
Verwende Autofilter
Hi,

aus der Hilfe-Seite zur .Find-Methode:
Zitat:Wenn die Suche das Ende des angegebenen Suchbereichs erreicht, erfolgt ein Umbruch zum Anfang des Bereichs. Um eine Suche bei einem Umbruch zu beenden, speichern Sie die Adresse der ersten gefundenen Zelle, und testen Sie dann jede nachfolgende gefundene Zelladresse mit dieser gespeicherten Adresse.

Alles klar?
Hi Helmut,

die learn.microsoft-Seite ist in diesem Punkt aber in der Tat fehlerhaft (siehe Beispiel 1) Wink

Range.FindNext-Methode (Excel) | Microsoft Learn
(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?
Seiten: 1 2