Clever-Excel-Forum

Normale Version: VBA Suche und Ausgabe im Listenfeld
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

ich möchte gerne, wenn ich in meiner Tabelle auf den Button "Suchen" klicke, dass die Vorgaben mit meinen Daten verglichen werden und das Ergebnis in dem Listenfeld angezeigt werden.

Im Anhang ist meine Tabelle. Leider hab ich noch keinen Code, weil ich noch nicht das richtige gefunden habe. ich hoffe Ihr könnt mir helfen.

Vielen lieben Dank im voraus.

Gruß Robbie1985
Hallo,

mit dem von dir eingebauten Listenfeld wird das eher nicht gehen. Du solltest ein ActiveX-Objekt verwenden, die kann man programmieren. Es wäre ohnehin zu überlegen, ob du da nicht ein UserForm verwenden willst.
Moin!
Außerhalb des bereits vorgeschlagenen erweiterten Filters:
Hier reicht das jeweilige Suchfeld des "normalen" Autofilters doch völlig aus.

Gruß Ralf
Guten Abend zusammen,

ich hab jetzt eine Userform zum Suchen und Anzeigen meiner Daten angelegt.

Ich habe auch einen Code dazu, aber der Code funktioniert nicht. Wenn ich im Tabellenblatt "Kunden" auf Suchen klicke, geht die Userform auf. Dann gebe ich bei Name einen Namen ein und klicke auf suchen und es kommt eine Fehlermeldung. 

Ich weiß nicht was ich falsch gemacht habt. Bitte schaut doch mal über den Code drüber. Ich hoffe Ihr könnt mir helfen.

Vielen Dank
Hallo,

Du definierst Deinen Ausgabebereich als String. Das geht so nicht, einen String könntest Du höchstens als Adressangabe nutzen. .Column ist auch eine Spaltenangabe.

Korrekt wäre z.B.
Range("AT10").Resize(UBound(lisDaten) + 1, 1).Value = (lisDaten)

Na ja, und dann ist noch viel zu tun ...
Hallo,

wozu drei UserForms? Das lässt sich alles ganz prima mit einem erledigen. Dann würde ich die Suche entweder mit der Find-Methode, oder mit der Funktion Match (geht allerdings immer nur für eine Spalte), durchführen. Eine Schleife wird bei großen Listen zu langsam sein.
Der gesamte Quelltext hat einiges an Optimierungspotenzial.
Hallo

ich sehe im Beispiel schon einen Professionell geschriebenen Code für den Suchlauf, den ich für die Praxis überarbeitet habe.

Der Suchlauf war bisher immer auf den Fam. Namen angewiesen, das ist  m.E. unsinnig. Ich muss ALLES suchen können. Auch nur nach Vornamen, PLZ, Tel. Nr. Kunden Nummer. Gib bitte mal in Kunden Nr. eine PLZ oder Telefon Nr. ein, und schau mal was passiert. Habe ich noch nicht getestet.  Der neue Code sollt jetzt alles finden können. Auch Mail Adressen, usw.  

Erweitert wurde er von mir auf 5 Spalten, damit du die wichtigsten Datensatz Teile erkennen kannst.  Wie gefallt dir jetzt dein Suchlauf??

mfg Gast 123

Nachtrag    Hallo Klaus Dieter  habe gerade deinen Beitrag gelesen, da hast du völlig recht. For Next ist langsamer als Find!
War mir aber zuviel Arbeit das auch noch umzufrickeln. Bin gespannt wie meine Idee beim Frager ankommt ....

Nachtrag    auf Anregung von Klaus Dieter - Programm Verbesserung:
Füge bitte noch eine Dim für LastZell suchen ein, und korrigiere damit die Set Anweisungen. Dann wird es für For Next Optimal!
 
    Dim KD As Worksheet    '** neu
    Dim lz1 As Long        '** neu LastZell
    
    'zu durchsuchender Bereich
    
        Set KD = Worksheets("Kundendaten")
        lz1 = KD.Cells(Rows.Count, 1).End(xlUp).Row
        Set finden = Worksheets("Kundendaten").Range("A2:Q" & lz1)
Hi,

schöne Lösung!
Wenn ich im Suchfeld "Name" z.B. Musterhausen oder Tel.Nr. oder E-Mail eingebe, dann werden die Kunden auch gefunden.
Bei Eingabe dieser Daten in Kundennummer oder Vorname findet Excel nix. Evtl. würde es doch reichen, nur das Feld "Name" zu haben und nach allem suchen zu können?
Im Suchergebnis-Fenster gibt es keine Spaltenüberschriften.

Mich würden noch die anderen Makros zum Auswählen, Bearbeiten und Anlegen der Kunden interessieren.
Hallo,

habe das so gelöst:

Code:
Private Sub Suchen_suchen_Click()
   Dim c As Range
   Dim firstAddress As String
   Dim n As Integer
   n = 1
   With Sheets("Kundendaten")
       Set c = .Range("A:Q").Find(What:=Name_suchen.Text, LookIn:=xlValues, Lookat:=xlPart)
       If Not c Is Nothing Then
           firstAddress = c.Address
           Do
               Suchergebnisse_suchen.AddItem c.Address
               Suchergebnisse_suchen.List(Suchergebnisse_suchen.ListCount - 1, 1) = .Cells(c.Row, 2)
               Suchergebnisse_suchen.List(Suchergebnisse_suchen.ListCount - 1, 2) = .Cells(c.Row, 5)
               Suchergebnisse_suchen.List(Suchergebnisse_suchen.ListCount - 1, 3) = .Cells(c.Row, 6)
               Suchergebnisse_suchen.List(Suchergebnisse_suchen.ListCount - 1, 4) = .Cells(c.Row, 9)
               Set c = .Range("A:Q").FindNext(c)
           Loop While Not c Is Nothing And c.Address <> firstAddress
       End If
   End With
End Sub

Es gibt nur eine TextBox für alle Suchbegriffe über alle Spalten. Die Suche funktioniert auch, wenn nur Teile des Suchbegriffs eigegeben werden.
Seiten: 1 2