Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1792to1796
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

.find innerhalb von .find

.find innerhalb von .find
11.11.2020 18:34:13
.find
Hallo,
ich stolpere nun schon den ganzen Tag über einige paralel laufende .find bzw. findnext Anweisungen.
Über "Find" suche ich aufeinem Arbeitsblatt einen bestimmten Wert (SERCH1) der in einer Spalte mehrfach auftaucht. Habe ich diesen gefunden nehme ich den aus der gleichen Zeile aber einer anderen Spalte einen wieteren Wert (RESULT1), nach dem ich wiederum drei weitere Arbeitsblätter durchsuche.
Über "Select Case" führe ich nun verschiedene Operationen aus je nachdem auf welchen Arbeitsblättern RESULT1 gefunden wurde.
Ist das erledigt suche ich weiter anch "SEARCH1" und das ganze soll von vorne losgehen.
So sieht das ganze in VBA aus:

With Worksheets("SHEET4").Columns("H:H")
Set FindRNG = .Find(SERCH1(y))
If Not FindRNG Is Nothing Then
firstAddress = FindRNG.Address
Do
RESULT1 = Sheets("MSL List").Cells(FindRNG.Row, 6).Value
Check1 = Not Worksheets("SHEET1").Columns("D:D").Find(RESULT1, LookIn:=xlValues)  Is  _
Nothing
Check2 = Not Worksheets("SHEET2").Columns("A:A").Find(RESULT1, LookIn:=xlValues)  Is  _
Nothing
Check3 = Not Worksheets("SHEET3").Columns("F:F").Find(RESULT1, LookIn:=xlValues)  Is  _
Nothing
Select Case True
Case Check1 = True And Check2 = False And Check3 = True
' do some stuff
Case Check1 = True And Check2 = False And Check3 = False
' do different stuff
Case Check1 = True And Check2 = True And Check3 = False
' do magical stuff
End Select
Set FindRNG = .FindNext(FindRNG)
Loop While Not FindRNG Is Nothing And FindGNG.Address  firstAddress
End If
End With
Solange ich die drei zeilen "Check1, check2 & check3" weglasse funktioniert es auch. Sobald ich die aber einfüge zerschiessen die dortigen "find anweisungen anscheinend irgendwie die "findRNG" anweisung und der ".FindNext resultiert in "nothing".
Was kann ich machen um das zu umgehen bzw. zu vermeiden?
Besten Dank für Ratschläge.
Ralf

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: .find innerhalb von .find
11.11.2020 19:19:11
.find
Hallo Ralf,
FindNext bezieht sich immer auf die letzte Find-Methode. Versuch es so:
With Worksheets("SHEET4").Columns(8)
    Set FindRNG = .Find(SERCH1(y))
    If Not FindRNG Is Nothing Then
        firstAddress = FindRNG.Address
        Do
            RESULT1 = Sheets("MSL List").Cells(FindRNG.Row, 6).Value
            Check1 = Not IsError(Application.Match(RESULT1, Worksheets("SHEET1").Columns(4), False))
            Check2 = Not IsError(Application.Match(RESULT1, Worksheets("SHEET2").Columns(1), False))
            Check3 = Not IsError(Application.Match(RESULT1, Worksheets("SHEET3").Columns(6), False))
            Select Case True
                Case Check1 And Not Check2 And Check3
                    ' do some stuff
                Case Check1 And Not Check2 And Not Check3
                    ' do different stuff
                Case Check1 And Check2 And Not Check3
                    ' do magical stuff
            End Select
            Set FindRNG = .FindNext(FindRNG)
        Loop Until FindGNG.Address = firstAddress
    End If
End With

Gruß
Nepumuk
Anzeige
AW: .find innerhalb von .find
11.11.2020 21:27:55
.find
Hallo Nepumuk,
nicht nur das es perfekt funktioniert, außerdem ist es auch noch einfacher!
Vielen Dank!
AW: .find innerhalb von .find
11.11.2020 21:40:37
.find
Hi
FINDNEXT orientiert sich immer am zuletzt gemachten .FIND
statt FINDNEXT kann man aber auch das normale .FIND verwenden, zusätzlich zu den üblichen Parametern gibt man noch die Parameter: AFTER:=Zelle und SEACHRDIRECTION:=xlnext/xlprevious an
AFTER ist die Zelle, nach der die Suche beginnt, hier gibt man dann die letzte Fundstelle an.
SEACHDIRECTION ist die Richtung, in die der nächste Wert gesucht wird, xlNext = nach unten, xlprevious = nach oben
das .FINDNEXT nimmt halt alle Parameter der letzten Suche und gibt nur die Zelle für AFTER neu vor.
generell solltest du, wenn du mehrere unterschiedliche Suchen hast, die Sucheinstellungen immer soweit wie benötigt vollständig angeben.
Gibst du einen Parameter bei .FIND nicht an, so wird die Einstellung der zuletzt gemachten Suche übernommen, ganz egal wer die wann gemacht hat.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige