Registriert seit: 23.04.2024
Version(en): Office 365
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
Registriert seit: 04.11.2014
Version(en): Office 365 Beta
Registriert seit: 29.09.2015
Version(en): 2030,5
Registriert seit: 28.08.2022
Version(en): 365
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
Registriert seit: 04.11.2014
Version(en): Office 365 Beta
Hi Helmut,
die learn.microsoft-Seite ist in diesem Punkt aber in der Tat fehlerhaft (siehe Beispiel 1)
Range.FindNext-Methode (Excel) | Microsoft Learn
26865
Nicht registrierter Gast
(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.
Registriert seit: 04.11.2014
Version(en): Office 365 Beta
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).
26865
Nicht registrierter Gast
Diese klare Differenzierung und Erläuterung vermisse ich schon immer in der OH.
Registriert seit: 12.03.2016
Version(en): Excel 2003
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
26865
Nicht registrierter Gast
(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?