Microsoft Excel

Herbers Excel/VBA-Archiv

Find Befehl, erst xlWhole, wenn nichts dann xlPart


Betrifft: Find Befehl, erst xlWhole, wenn nichts dann xlPart von: Karsten J.
Geschrieben am: 20.07.2017 22:47:25

Hi

Ich nutze folgende Suche:

Set Rng = Worksheets("Mitarbeiter").Range(Worksheets("Mitarbeiter").Cells(1, 2), Worksheets("Mitarbeiter").Cells(150, 2)).Find(what:=Worksheets("s").Cells(a, 1), lookat:=xlPart, LookIn:=xlValues, MatchCase:=True)

Ich suche extra nach einem Teil, weil vor und/oder hinter dem Begriff etwas stehen kann.

Beispiel:
Er soll den Mitarbeiter "Deters" suchen.
Jetzt kann der Name folgendermaßen vorhanden sein:
Deters
?1 Deters
Deters - 2Std.

Das Problem ist aber, wenn 2 Mitarbeiter mit gleichem Namen in einer Abteilung arbeiten.
Wenn jetzt bei einem nur Deters und beim anderen B. Deters steht, findet er bei der Suche nach dem ersten, auch den zweiten. Und wenn der zu erst gefunden wird, gibt das natürlich Probleme.

Jetzt würde ich erst suchen mit xlWhole und wenn er nichts findet dann noch xlPart hinterher, sonst nicht.

Gruß

Karsten

  

Betrifft: AW: Find Befehl, erst xlWhole, wenn nichts dann xlPart von: Oberschlumpf
Geschrieben am: 20.07.2017 23:25:54

Hi Karsten

Ich habs jetzt nicht getestet, aber versuch es doch mal so:

Erstmal, kürze die Codezeile (nur der Übersicht halber)

With Worksheets("Mitarbeiter")
    Set Rng = .Range(.Cells(1, 2), .Cells(150, 2)).Find(what:=Worksheets("s").Cells(a, 1),  _
lookat:=xlWhole, LookIn:=xlValues, MatchCase:=True)

        If Rng = Nothing Then
            Set Rng = .Range(.Cells(1, 2), .Cells(150, 2)).Find(what:=Worksheets("s").Cells(a,  _
1), lookat:=xlWhole, LookIn:=xlValues, MatchCase:=True)
        End If
End With

Wenn mit xlWhole kein Treffer, dann ist Rng = Nothing.
Und nur dann, wenn Rng = Nothing, DANN noch mal mit xlPart (ver)suchen.

So zumindest meine Idee.

Hilfts?

(du musst natürlich die Zeilenumbrüche in den Codezeilen entfernen)

Ciao
Thorsten