Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Schleife Endet nicht (.Find Method)
#1
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
Antworten Top
#2
Hi,

schau mal z.B. hier:  Beispiel zur FindNext-Methode | Herbers Excel-Server
Antworten Top
#3
Verwende Autofilter
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#4
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?
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#5
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
Antworten Top
#6
(24.04.2024, 12: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.
Antworten Top
#7
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).
Antworten Top
#8
Diese klare Differenzierung und Erläuterung vermisse ich schon immer in der OH.
Antworten Top
#9
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
Antworten Top
#10
(24.04.2024, 13: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?
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste