Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1552to1556
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Schleifenende bei FindNext

Schleifenende bei FindNext
30.04.2017 18:03:50
Gerd
Guten Abend!
An folgendem Beispiel eine Frage zur Code-Struktur:
Private Sub CommandButton1_Click()
Dim WS As Worksheet: Set WS = ActiveSheet
Dim sfErg As Range
Dim eingabe As String
If TextBox1 = "" Then
MsgBox "Bitte Suchbegriff eingeben!"
Else
eingabe = TextBox1.Value
With WS.Range("A:A")
Set sfErg = .Find(eingabe, LookIn:=xlValues, lookat:=xlWhole)
If Not sfErg Is Nothing Then
firstAddress = sfErg.Address
Do
If MsgBox("" & eingabe & " wurde gefunden in Zelle: " _
& sfErg.Address(0, 0), vbInformation + vbOKCancel, _
"Wert wurde gefunden in: ") = vbCancel Then Exit Do
Set sfErg = .FindNext(sfErg)
Loop While Not sfErg Is Nothing And sfErg.Address  firstAddress
End If
End With
End If
End Sub

Weshalb wird hier im Schleifenende auf "Not sfErg Is Nothing" geprüft,
obwohl die Schleife doch (Debug.Errors ausgenommen) immer zur "firstAddress" zurück läuft?
Gruß Gerd

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleifenende bei FindNext
30.04.2017 18:11:40
Mullit
Hallo Gerd,
gute Frage, das ist (auch) ein Fehler in der Excel-Hilfe, richtiger muß es heißen:
Do
Loop Until sfErg.Address = firstAddres

Denn wenn sfErg Nothing ist, läuft auch die sfErg.Address firstAddress Prüfung in einen Fehler...
Gruß, Mullit
AW: Schleifenende bei FindNext
30.04.2017 18:17:39
Mullit
Hallo nochmal,
bei mir fehlt bei firstAddress noch ein 's', dafür fehlt im Code die firstAddress-Deklaration ganz, offensichtlich ohne Option Explicit geproggt....böse, böse...;-)
Gruß, Mullit
AW: Schleifenende bei FindNext
30.04.2017 18:24:33
Gerd
Hallo Mullit,
sei 's drum. Der Code stammt nicht von mir u. sollte wirklich nur als Vorlage für die Code-Struktur
und das so formulierte Schleifenende dienen.
Danke für deine Antwort. Ich sehe das bisher genauso. Bin gespannt, ob noch eine abweichende schlüssig begründete Äußerung kommt.
Gruß Gerd
Anzeige
AW: Schleifenende bei FindNext
30.04.2017 18:38:22
Mullit
Hallo,
null Problemo, da kanns keine abweichende Antwort geben, oder sie ist falsch.
Gruß, Mullit
AW: Schleifenende bei FindNext
30.04.2017 19:39:04
Crazy
Hallo zusammen
der ursprüngliche Code stammt aus der Beispieldatei 4 Beiträge tiefer
und in der Tat wird dort ohne Option Explicit gearbeitet
ich habe ihn nur ein bissel verändert um die Lauffähigkeit herzustellen
hatte keinen B... den komplett neu zu machen
aber bei nicht gefunden läuft es nicht in einen Fehler
MfG Tom
AW: Schleifenende bei FindNext
30.04.2017 19:45:47
Crazy
Hallo
keinen B... war der falsche Ausdruck, lag eher an knapper Zeit
so sieht der Code jetzt aus
Option Explicit
Private Sub CommandButton1_Click()
Dim sfErg As Range
Dim rngBereich As Range
Dim eingabe As String
Dim firstAddress As String
If TextBox1 = "" Then
MsgBox "Bitte Suchbegriff eingeben!"
Else
eingabe = TextBox1.Value
Set rngBereich = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
Set sfErg = rngBereich.Find(eingabe, LookIn:=xlValues, lookat:=xlWhole)
If Not sfErg Is Nothing Then
firstAddress = sfErg.Address
Do
If MsgBox("" & eingabe & " wurde gefunden in Zelle: " _
& sfErg.Address(0, 0), vbInformation + vbOKCancel, _
"Wert wurde gefunden in: ") = vbCancel Then Exit Do
Set sfErg = rngBereich.FindNext(sfErg)
Loop While Not sfErg Is Nothing And sfErg.Address  firstAddress
End If
End If
End Sub
wenn ich das hier weglasse
If Not sfErg Is Nothing Then
dann rauscht es bei keiner Fundstelle in einen Fehler
MfG Tom
Anzeige
AW: Schleifenende bei FindNext
30.04.2017 19:53:49
Crazy
Hallo
ich sehe grad erst dass es ums Schleifenende geht
mit Loop Until hab ich so eine Schleife noch nie abgeschlossen
und mir ehrlich gesagt auch noch nie Gedanken um diese Alternative gemacht
MfG Tom
AW: Schleifenende bei FindNext
30.04.2017 20:50:25
Mullit
Hallo,
yup, die Not is Nothing-Prüfung im 'SchleifenFuß' ist überflüssig und würde im folgenden Bsp. zum Fehler führen und sollte daher wie geschr. anders notiert werden:
Option Explicit

Public Sub test()
Dim objCell As Range
Dim strFirstAddress As String
Cells(3, 1).Value = "test"  '// als TestInput... 
Cells(5, 1).Value = "test"
With Cells(1, 1).Resize(10, 1)
    Set objCell = .Find(What:="test", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
    If Not objCell Is Nothing Then
       strFirstAddress = objCell.Address
       Do
          Call objCell.ClearContents
          Set objCell = .FindNext(After:=objCell)
       Loop While Not objCell Is Nothing And objCell.Address <> strFirstAddress '<--- der Runtime-Error... 
    End If
End With
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß, Mullit
Anzeige
AW: Schleifenende bei FindNext
30.04.2017 21:06:47
Crazy
Hallo Mullit
in dem Fall kommt es logischer Weise zum Fehler
es werden ja die gefundenen Zellen geleert
und da macht die Überprüfung
And objCell.Address strFirstAddress
keinen Sinn
da in dem Thread 4 Beiträge tiefer aber nur die
Fundstellen in einer MsgBox ausgegeben werden sollen
sehe ich in der überflüssigen Loop While...usw keinen Fehler
MfG Tom
AW: Schleifenende bei FindNext
30.04.2017 21:27:05
Mullit
Hallo Tom,
gut klar das Bsp. war jetzt etwas konstruiert, ändert aber leider nichts an der Tatsache , daß die Anweisung überflüssig ist und ein gewisses Fehlerpotenzial birgt, denn wenn man darauf abfragt, erwartet man schließlich auch den Nothing Fall, für den aber, wie in dem Bsp. gut zu sehen, die Address-Prüfung in den Runtime-Error läuft...so siehts nun mal aus...aber laß Dir davon den Maifeiertag nicht verderben... ;-)
Gruß, Mullit
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige