Do Schleife bei einer Suchfunktion (VBA UserForm)

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm Label TextBox MsgBox
Bild

Betrifft: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Tobias
Geschrieben am: 20.08.2015 15:28:23

Hallo zusammen,
ich versuche Namen zu suchen in einer Tabelle. In A stehen die Nachnamen, in B Vornamen. Das ganze soll in einer VBA User Form geschehen.
Einzelne Nachnamen zu suchen ist kein Problem, Namen wie Müller, Meier etc. ;) kommen jedoch häufiger vor und sollen dann in Kombination mit dem Vornamen ausgegeben werden. Das Problem ist, dass ich nicht weiß wie ich eine passende Schleife da rein setzte, dass der solange sucht bis Vorname und Nachname in der gleiche Row gefunden werden.
Das ist mein Ansatz:

Private Sub Such_Click()
Dim i As Integer
 Dim rZelle        As Range
 Dim rZelle2        As Range
 Dim sSuchbegriff  As String
 Dim sSuchbegriff2  As String
    If Trim$(TextBox1.Value) <> "" Then
       sSuchbegriff = Trim$(TextBox1.Value)
     Else
       MsgBox "Sie müssen einen Suchbegiff eingeben - danke.", _
          48, "   Hinweis für " & Application.UserName
       Exit Sub
    End If
    
    If Trim$(TextBox2.Value) <> "" Then
       sSuchbegriff2 = Trim$(TextBox2.Value)
     Else
       MsgBox "Sie müssen einen Suchbegiff eingeben - danke.", _
          48, "   Hinweis für " & Application.UserName
       Exit Sub
    End If
Do
i = 1
Set rZelle = ThisWorkbook.Worksheets("Daten").Cells(i, 1).Find(what:=sSuchbegriff, LookAt:= _
xlPart, LookIn:=xlValues)
Set rZelle2 = ThisWorkbook.Worksheets("Daten").Cells(i, 2).Find(what:=sSuchbegriff2, LookAt:= _
xlPart, LookIn:=xlValues)
   
 If rZelle.Row = rZelle2.Row Then
 
    
       With ThisWorkbook.Worksheets("Daten").Columns(1)
       If Not rZelle Is Nothing Then
         Label2.Caption = .Range("A" & rZelle.Row).Value
          Label3.Caption = .Range("B" & rZelle.Row).Value
          Label4.Caption = .Range("C" & rZelle.Row).Value
          Label5.Caption = .Range("D" & rZelle.Row).Value
          Label6.Caption = .Range("E" & rZelle.Row).Value
          Label7.Caption = .Range("F" & rZelle.Row).Value
          Label44.Caption = .Range("G" & rZelle.Row).Value
          Label9.Caption = .Range("H" & rZelle.Row).Value
          Label10.Caption = .Range("I" & rZelle.Row).Value
          Label11.Caption = .Range("J" & rZelle.Row).Value
          Label12.Caption = .Range("K" & rZelle.Row).Value
          Label13.Caption = .Range("L" & rZelle.Row).Value
          Label14.Caption = .Range("M" & rZelle.Row).Value
          Label15.Caption = .Range("N" & rZelle.Row).Value
          Label16.Caption = .Range("O" & rZelle.Row).Value
          Label17.Caption = .Range("P" & rZelle.Row).Value
          Label39.Caption = .Range("Q" & rZelle.Row).Value
          Label40.Caption = .Range("R" & rZelle.Row).Value
          Label41.Caption = .Range("S" & rZelle.Row).Value
          Label42.Caption = .Range("T" & rZelle.Row).Value
          Label43.Caption = .Range("U" & rZelle.Row).Value
         Label45.Caption = .Range("V" & rZelle.Row).Value
          
         
        
          
       ' usw.
        Else
          MsgBox "Der Begriff  """ & sSuchbegriff & """  wurde nicht gefunden.", _
             48, "   Hinweis für " & Application.UserName
          With TextBox1
             .SetFocus
             .SelStart = 0
             .SelLength = Len(.Text)
          End With
       End If
   End With
Else
i = i + 1
Loop
End If
   Set rZelle = Nothing
Set rZelle2 = Nothing
 End Sub
Das mit der Schleife stimmt vorne und hinten nicht,... wäre über Hilfe sehr dankbar.
Liebe Grüße
P.S vielleicht ist die schleife ja auch ein komplett falscher Ansatz, bitte um Aufklärung ;)

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Matthias
Geschrieben am: 20.08.2015 16:04:55
Hallo Tobias,
ich bin leider in dem Thema nicht 100%ig bewandert, aber du könntest für die gefundenen Nachnamen die deiner Suche entsprechen dir einen String aus Vor- und Nachname machen lassen
(Var1=rZelle.value & Cells(rZelle.row,rZelle.Column+1).value)
und das gleiche natürlich mit deinen zwei Suchbegriffen. Wenn diese Strings übereinstimmen, dann BÄM.
lg Matthias

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Tobias
Geschrieben am: 20.08.2015 16:15:19
aber trotzdem müsste hier doch auch eine schleife rein, dass wenn es nicht übereinstimmt in die nächste zeile gegangen wird ?
Stellst du dir das etwa so vor:


...
var1 = rZelle.Value & Cells(rezlle.Row, rZelle.Column + 1).Value
   var2 = suchbegriff1 & suchberiff2
   
 If var1 = var2 Then
..
auf rzelle2 könnte ich bei dieser Herangehensweise verzichten gell?

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Matthias
Geschrieben am: 21.08.2015 08:49:18
Guten Morgen Tobias,
stimmt, rZelle2 ist dann nicht mehr nötig, nach ihr wird nicht gesucht.
Ich würde mit FindNext einfach solange den nächsten Nachnamen suchen, bis Var1 und Var2 sich gleichen und dann die Schleife verlassen. Die Namen waren nur ein Schnellschuss für den Grundgedanken, ich würd eventuell aussagekräftigere vergeben, Bsp.: sFullName1.

With ThisWorkbook.Worksheets("Daten").Range("A:A") 
    Set rZelle = .Find(sSuchbegriff, lookin:=xlValues) 
    If Not rZelle Is Nothing Then 
        firstAddress = rZelle.Address 
        Do 
            var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value
            var2 = sSuchbegriff1 & sSuchberiff2
            If var1 = var2 Then Exit Do
            Set rZelle = .FindNext(rZelle) 
        Loop While Not rZelle Is Nothing And rZelle.Address <> firstAddress 
    End If 
End With 
'(Quelle: https://msdn.microsoft.com/de-de/library/office/Ff196143.aspx - Beispiel 1)
Diese Schleife funktioniert übrigens auch wenn die Namen nicht sortiert sind. Da du von "in die nächste Zeile gehen" geredet hast, nehme ich an dass sie es aber sind und damit untereinander stehen, richtig?
Kurze Frage zu deinem Code aus dem ersten Post:
Warum hast du eigentlich deine Suche auf eine Zelle begrenzt (Cells(i,1)) und dann i hochgezählt mit der Schleife, statt in der gesamten Spalte zu suchen. Dann könntest du nämlich gleich auf den Suchbefehl verzichten und einfach mit For i = 1 to "letzteZeile" alle Zeilen durchgehen, was bei langen Dokumenten durchaus Ressourcen frisst.
lg Matthias

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Matthias
Geschrieben am: 21.08.2015 08:52:35
Kleiner Fehler noch:
hinter sSuchbegriff die 1 entfernen:

var2 = sSuchbegriff1 & sSuchberiff2

Tut mir leid, das hab' ich so aus deinem vorigen Post übernommen ohne groß zu schaun.
lg Matthias

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Tobias
Geschrieben am: 21.08.2015 10:07:03
Hi Matthias,
erstmal vielen Dank für deine Hilfe.
Das mit den Cells war einfach so, habe viel ausprobiert ;).
Den Code hab ich so eingefügt. Richtig, die Namen sind alphabetisch sortiert, also muss man im Normalfall nur höchstens 2-3 Zeilen weiter runter.
Er zeigt bei der Suche leider immer noch den ersten Nachnamen an, und ignoriert dass die Vornamen nicht übereinstimmen. Die var1 = var2 Überprüfung scheint also nicht so ganz zu funktionieren.
Kannst du mir den firstaddress Teil einmal näher erläutern? Den verstehe ich nicht so ganz. Ist das einfach eine neue string? Weil sonst startet der Code gar nicht.
Lg
Tobias

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Matthias
Geschrieben am: 21.08.2015 10:22:32
Jupp,
das ist ein neuer String, welcher der Überprüfung dient ob ich in meiner Suche bereits mit dem Dokument durch bin oder nicht. Wie du siehst wird ihm die Adresse des ersten gefundenen Eintrags übergeben. Sobald diese rZelle diese Adresse wieder aufweist wird die Schleife mittels "While Not" beendet.
Eine Frage, hast du in deinem Code "Option Explicit" ganz oben stehn? Wenn nicht nutz das mal. Am Anfang ist es zwar nervig, aber man gewöhnt sich schnell daran. Dann findet man solche Fehler wie deinen relativ einfach. Ist als ob man die Oma korrekturlesen lässt. Ich verrats jedenfalls nicht woran es liegt ;)
lg Matthias

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Tobias
Geschrieben am: 21.08.2015 10:31:24
Hey,
ja klar, das steht drin. Das g Suchbegriff ist es nicht, das hab ich schon rausgemacht ;)
Es muss an der Überprüfung liegen oder ähnlichem, ich kann egal was für den Vornamen eingeben, es wird nicht berücksichtigt. Er sucht lediglich nach den Nachnamen und zeigt den ersten an den er gefunden hat.
Oder hab ich etwas anderes übersehen?

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Tobias
Geschrieben am: 21.08.2015 10:37:36


var2 = sSuchbegriff1 & sSuchberiff2

bzw. ich hab das g ergänzt ;)

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Tobias
Geschrieben am: 21.08.2015 11:18:41
und ich hab leider rausgefunden, dass der var1 string nicht abgespeichert wird. Er erkennt cells(...).value nicht als text an sondern gibt nur den ersten Namen aus.

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Matthias
Geschrieben am: 21.08.2015 14:24:47
Hallo Tobias,
mit diesem Makro hab ich in folgender Liste getestet, funktioniert prima:
Z A B
1 Peter Hansl
2 Stefan Hansl
3 Steffen Laver
4 Peter Meier
5 Maik Meier
6 Peter Zwickert
7 Robert Mayer

Sub Suche()
Dim sSuchbegriff As String
Dim sSuchbegriff2 As String
Dim rZelle As Range
Dim firstAddress As String
Dim Var1 As String
Dim Var2 As String
sSuchbegriff = "Peter"
sSuchbegriff2 = "Zwickert"
'---------
Var2 = sSuchbegriff & sSuchbegriff2
With ThisWorkbook.Worksheets("Tabelle2").Range("A:A") '###Worksheets("Daten")
    Set rZelle = .Find(sSuchbegriff, LookIn:=xlValues)
    If Not rZelle Is Nothing Then
        firstAddress = rZelle.Address
        Do
            Var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value
            MsgBox "Var1: " & Var1 & "  Var2: " & Var2 '###
            If Var1 = Var2 Then GoTo Fund
            Set rZelle = .FindNext(rZelle)
        Loop While Not rZelle Is Nothing And rZelle.Address <> firstAddress
        Set rZelle = Nothing 'kein Fund
        MsgBox "Suchbegriff nicht gefunden."
        Exit Sub '###Goto KeinFund
    End If
Fund:
MsgBox "Gefundene Zelle: " & rZelle.Address '###
End With
End Sub
Mit '### gekennzeichte Zeilen sind von dir zu ändern bzw. von mir zu Testzwecken drinn, aber siehst du ja selbst. Damit kann ich jeden einzelnen Treffer für sSuchbegriff anzeigen lassen und prüfen. Dabei ist mir aufgefallen, dass ich ja keinen Abzweig für den Fall dass es den gesuchten Namen nicht gibt geschaffen habe. Dies sei hiermit nachgeholt. ExitSub muss an der Stelle nicht sein, wenn du noch andere Sachen vorhast.
Auch braucht man Var2 nicht mit jedem Schleifendurchlauf neu zu bestimmen, desshalb nach oben gepackt.
Ja, ich weis ich hab Vor- und Nachnamen vertauscht, das sollte aber nix ändern.
Kann es sein, dass du "sSuchbgegriff1" schreibst (s. letzter Post von dir)? Du hast die Variable doch ganz oben ohne 1 verwendet. Cells.value übergibt bei mir jedenfalls wie gewollt den Wert (Text) der Zelle (s. Ausgabe der MsgBox im Testprogramm). Hoffe es liegt nur daran.
lg Matthias

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Matthias
Geschrieben am: 21.08.2015 14:24:53
Hallo Tobias,
mit diesem Makro hab ich in folgender Liste getestet, funktioniert prima:
Z A B
1 Peter Hansl
2 Stefan Hansl
3 Steffen Laver
4 Peter Meier
5 Maik Meier
6 Peter Zwickert
7 Robert Mayer

Sub Suche()
Dim sSuchbegriff As String
Dim sSuchbegriff2 As String
Dim rZelle As Range
Dim firstAddress As String
Dim Var1 As String
Dim Var2 As String
sSuchbegriff = "Peter"
sSuchbegriff2 = "Zwickert"
'---------
Var2 = sSuchbegriff & sSuchbegriff2
With ThisWorkbook.Worksheets("Tabelle2").Range("A:A") '###Worksheets("Daten")
    Set rZelle = .Find(sSuchbegriff, LookIn:=xlValues)
    If Not rZelle Is Nothing Then
        firstAddress = rZelle.Address
        Do
            Var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value
            MsgBox "Var1: " & Var1 & "  Var2: " & Var2 '###
            If Var1 = Var2 Then GoTo Fund
            Set rZelle = .FindNext(rZelle)
        Loop While Not rZelle Is Nothing And rZelle.Address <> firstAddress
        Set rZelle = Nothing 'kein Fund
        MsgBox "Suchbegriff nicht gefunden."
        Exit Sub '###Goto KeinFund
    End If
Fund:
MsgBox "Gefundene Zelle: " & rZelle.Address '###
End With
End Sub
Mit '### gekennzeichte Zeilen sind von dir zu ändern bzw. von mir zu Testzwecken drinn, aber siehst du ja selbst. Damit kann ich jeden einzelnen Treffer für sSuchbegriff anzeigen lassen und prüfen. Dabei ist mir aufgefallen, dass ich ja keinen Abzweig für den Fall dass es den gesuchten Namen nicht gibt geschaffen habe. Dies sei hiermit nachgeholt. ExitSub muss an der Stelle nicht sein, wenn du noch andere Sachen vorhast.
Auch braucht man Var2 nicht mit jedem Schleifendurchlauf neu zu bestimmen, desshalb nach oben gepackt.
Ja, ich weis ich hab Vor- und Nachnamen vertauscht, das sollte aber nix ändern.
Kann es sein, dass du "sSuchbgegriff1" schreibst (s. letzter Post von dir)? Du hast die Variable doch ganz oben ohne 1 verwendet. Cells.value übergibt bei mir jedenfalls wie gewollt den Wert (Text) der Zelle (s. Ausgabe der MsgBox im Testprogramm). Hoffe es liegt nur daran.
lg Matthias

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Tobias
Geschrieben am: 21.08.2015 14:29:22
Jetzt klappt es doch irgendwie :)


With ThisWorkbook.Worksheets("Daten").Range("A1:A1000")
    Set rzelle = .Find(sSuchbegriff, LookIn:=xlValues)
    If Not rzelle Is Nothing Then
     
        Do
           firstaddress = rzelle.Address
            var1 = rzelle.Value & Cells(rzelle.Row, rzelle.Column + 1).Value
            var2 = sSuchbegriff & sSuchbegriff2
            If var1 = var2 Then Exit Do
            Set rzelle = .FindNext(rzelle)
        Loop While Not rzelle Is Nothing And rzelle.Address <> firstaddress
    End If
End With
vielleicht siehst du den Unterschied ;)

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Matthias
Geschrieben am: 21.08.2015 15:06:44
Hallo Tobias,
ich bin mir sicher du meinst nicht die Groß-/Kleinschreibung deiner Variablen, genausowenig wie die Änderung der Suchrange. Die Leerzeile ist auch ganz nett ;)
firstAddress in die Schleife zu nehmen hebelt den Sinn dieser Variablen aus. Du definierst sie ja nach bei Beginn jedes Durchgangs neu, und zwar mit der Zelle des letzten gefundenen "Müller"-Eintrags. Damit ist sie nicht mehr DAS Original. Das heisst: "Setzen, Sechs!"
lg Matthias

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Tobias
Geschrieben am: 21.08.2015 15:33:18
ja du hast recht, ich war nur verwundert.. es ging wirklich kurzeitig, nun aber nicht mehr. Warum weiß ich auch nicht.
Aber das Problem, dass die var1 nicht beide Namen umfasst besteht trotzdem. Hab eine msgbox eingebaut und diese zeigt mir bei var1 immer nur den Nachnamen, bei var2 Nach- und Vorname an. So kann der Vergleich var1 = var2 ja nicht funktionieren.
Die Lösung scheint in weiter ferne :D

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Matthias
Geschrieben am: 21.08.2015 16:34:06
Ich verstehe nicht warum...

Var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value

bei dir kein Ergebnis liefert. Deine Vornamen stehen doch eine Spalte rechts der Nachnamen, richtig?
Da sich die Spalte nicht ändert, könntest du auch eine 2 draus machen bzw. schreiben:
Var1 = rZelle.Value & Range("B" & rZelle.Row).Value

Das sollte aber wenig am Sachverhalt ändern.
Egal bei welcher Variante geht noch:
Var1 = rZelle.Value & Range("B" & rZelle.Row).Formula

Wobei ich da kein Fan von bin.
lg

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Michael
Geschrieben am: 21.08.2015 19:24:01
Hi zusammen,
vermutlich deshalb, weil der . vor cells fehlt ...

Var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value

und sich das auf ein anderes Blatt bezieht.
Viel einfacher geht es (prinzipiell) so:
Var1 = rZelle.Value & rZelle.Offset(0, 1).Value

damit sind nämlich auch evtl. "seltsame" Blattzugehörigkeiten ausgeschlossen.
Ich hab das trotzdem mal nachgebastelt und lade die Datei hoch:
https://www.herber.de/bbs/user/99769.xls
Der Code ist hie und da "geglättet".
Schöne Grüße,
Michael

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Tobias
Geschrieben am: 24.08.2015 08:28:57
Top, funktioniert nun einwandfrei!

Var1 = rZelle.Value & rZelle.Offset(0, 1).Value

löst das Problem und ich kann nun ohne Probleme Vor- und Nachname suchen.
Vielen Dank euch beiden!!

Bild

Betrifft: freut mich, danke für die Rückmeldung owT
von: Michael
Geschrieben am: 24.08.2015 15:03:53


Bild

Betrifft: Nachtrag
von: Michael
Geschrieben am: 21.08.2015 19:25:39
Wenn es sich nicht gerade um 500 Namen handelt, finde ich die Lösung mit den "abhängigen Komboboxen" eigentlich viel Netter: http://www.j-hennekes.de/1298803.htm

Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Tobias
Geschrieben am: 20.08.2015 16:26:28
Habe daraus mal die Schleife gemacht, funktioniert aber leider nicht.
Es kommt immer: Der Begriff wurde nicht gefunden.
Wie kann es nun weiter gehen?
Trotzdem danke Matthias, denke es ist ein guter Ansatz!!

Private Sub Such_Click()
Dim i As Integer
 Dim rZelle        As Range
 Dim rZelle2        As Range
 Dim sSuchbegriff  As String
 Dim sSuchbegriff2  As String
 Dim var1 As String
 Dim var2 As String
 
    If Trim$(TextBox1.Value) <> "" Then
       sSuchbegriff = Trim$(TextBox1.Value)
     Else
       MsgBox "Sie müssen einen Suchbegiff eingeben - danke.", _
          48, "   Hinweis für " & Application.UserName
       Exit Sub
    End If
    
    If Trim$(TextBox2.Value) <> "" Then
       sSuchbegriff2 = Trim$(TextBox2.Value)
     Else
       MsgBox "Sie müssen einen Suchbegiff eingeben - danke.", _
          48, "   Hinweis für " & Application.UserName
       Exit Sub
    End If
i = 0
While var1 <> var2
Set rZelle = ThisWorkbook.Worksheets("Daten").Cells(1 + i, 1).Find(what:=sSuchbegriff, LookAt:= _
xlPart, LookIn:=xlValues)
   var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value
   var2 = sSuchbegriff & sSuchbegriff2
   
i = i + 1
Wend
    
       With ThisWorkbook.Worksheets("Daten").Columns(1)
       If Not rZelle Is Nothing Then
         Label2.Caption = .Range("A" & rZelle.Row).Value
          Label3.Caption = .Range("B" & rZelle.Row).Value
          Label4.Caption = .Range("C" & rZelle.Row).Value
          Label5.Caption = .Range("D" & rZelle.Row).Value
          Label6.Caption = .Range("E" & rZelle.Row).Value
          Label7.Caption = .Range("F" & rZelle.Row).Value
          Label44.Caption = .Range("G" & rZelle.Row).Value
          Label9.Caption = .Range("H" & rZelle.Row).Value
          Label10.Caption = .Range("I" & rZelle.Row).Value
          Label11.Caption = .Range("J" & rZelle.Row).Value
          Label12.Caption = .Range("K" & rZelle.Row).Value
          Label13.Caption = .Range("L" & rZelle.Row).Value
          Label14.Caption = .Range("M" & rZelle.Row).Value
          Label15.Caption = .Range("N" & rZelle.Row).Value
          Label16.Caption = .Range("O" & rZelle.Row).Value
          Label17.Caption = .Range("P" & rZelle.Row).Value
          Label39.Caption = .Range("Q" & rZelle.Row).Value
          Label40.Caption = .Range("R" & rZelle.Row).Value
          Label41.Caption = .Range("S" & rZelle.Row).Value
          Label42.Caption = .Range("T" & rZelle.Row).Value
          Label43.Caption = .Range("U" & rZelle.Row).Value
         Label45.Caption = .Range("V" & rZelle.Row).Value
          
         
        
          
       ' usw.
        Else
          MsgBox "Der Begriff  """ & sSuchbegriff & """  wurde nicht gefunden.", _
             48, "   Hinweis für " & Application.UserName
          With TextBox1
             .SetFocus
             .SelStart = 0
             .SelLength = Len(.Text)
          End With
       End If
   End With
   Set rZelle = Nothing
Set rZelle2 = Nothing
 End Sub


Bild

Betrifft: AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
von: Tobias
Geschrieben am: 20.08.2015 16:26:33
Habe daraus mal die Schleife gemacht, funktioniert aber leider nicht.
Es kommt immer: Der Begriff wurde nicht gefunden.
Wie kann es nun weiter gehen?
Trotzdem danke Matthias, denke es ist ein guter Ansatz!!

Private Sub Such_Click()
Dim i As Integer
 Dim rZelle        As Range
 Dim rZelle2        As Range
 Dim sSuchbegriff  As String
 Dim sSuchbegriff2  As String
 Dim var1 As String
 Dim var2 As String
 
    If Trim$(TextBox1.Value) <> "" Then
       sSuchbegriff = Trim$(TextBox1.Value)
     Else
       MsgBox "Sie müssen einen Suchbegiff eingeben - danke.", _
          48, "   Hinweis für " & Application.UserName
       Exit Sub
    End If
    
    If Trim$(TextBox2.Value) <> "" Then
       sSuchbegriff2 = Trim$(TextBox2.Value)
     Else
       MsgBox "Sie müssen einen Suchbegiff eingeben - danke.", _
          48, "   Hinweis für " & Application.UserName
       Exit Sub
    End If
i = 0
While var1 <> var2
Set rZelle = ThisWorkbook.Worksheets("Daten").Cells(1 + i, 1).Find(what:=sSuchbegriff, LookAt:= _
xlPart, LookIn:=xlValues)
   var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value
   var2 = sSuchbegriff & sSuchbegriff2
   
i = i + 1
Wend
    
       With ThisWorkbook.Worksheets("Daten").Columns(1)
       If Not rZelle Is Nothing Then
         Label2.Caption = .Range("A" & rZelle.Row).Value
          Label3.Caption = .Range("B" & rZelle.Row).Value
          Label4.Caption = .Range("C" & rZelle.Row).Value
          Label5.Caption = .Range("D" & rZelle.Row).Value
          Label6.Caption = .Range("E" & rZelle.Row).Value
          Label7.Caption = .Range("F" & rZelle.Row).Value
          Label44.Caption = .Range("G" & rZelle.Row).Value
          Label9.Caption = .Range("H" & rZelle.Row).Value
          Label10.Caption = .Range("I" & rZelle.Row).Value
          Label11.Caption = .Range("J" & rZelle.Row).Value
          Label12.Caption = .Range("K" & rZelle.Row).Value
          Label13.Caption = .Range("L" & rZelle.Row).Value
          Label14.Caption = .Range("M" & rZelle.Row).Value
          Label15.Caption = .Range("N" & rZelle.Row).Value
          Label16.Caption = .Range("O" & rZelle.Row).Value
          Label17.Caption = .Range("P" & rZelle.Row).Value
          Label39.Caption = .Range("Q" & rZelle.Row).Value
          Label40.Caption = .Range("R" & rZelle.Row).Value
          Label41.Caption = .Range("S" & rZelle.Row).Value
          Label42.Caption = .Range("T" & rZelle.Row).Value
          Label43.Caption = .Range("U" & rZelle.Row).Value
         Label45.Caption = .Range("V" & rZelle.Row).Value
          
         
        
          
       ' usw.
        Else
          MsgBox "Der Begriff  """ & sSuchbegriff & """  wurde nicht gefunden.", _
             48, "   Hinweis für " & Application.UserName
          With TextBox1
             .SetFocus
             .SelStart = 0
             .SelLength = Len(.Text)
          End With
       End If
   End With
   Set rZelle = Nothing
Set rZelle2 = Nothing
 End Sub


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Do Schleife bei einer Suchfunktion (VBA UserForm) "