VBA Suche und Ausgabe im Listenfeld
#1
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


Angehängte Dateien
.xlsx   Test Suche Listenfeld.xlsx (Größe: 13,32 KB / Downloads: 9)
Antworten Top
#2
Moin

VBA Advanced Filter - The FASTEST way to Copy and Filter Data
How to use AND, OR and Formulas with VBA Advanced Filter
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#3
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.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#4
Moin!
Außerhalb des bereits vorgeschlagenen erweiterten Filters:
Hier reicht das jeweilige Suchfeld des "normalen" Autofilters doch völlig aus.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
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


Angehängte Dateien
.xlsm   test Kunden.xlsm (Größe: 58,64 KB / Downloads: 10)
Antworten Top
#6
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 ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#7
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.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#8
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)


Angehängte Dateien
.xlsm   test Kunden F.xlsm (Größe: 60,85 KB / Downloads: 13)
Antworten Top
#9
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.
Antworten Top
#10
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.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste