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.
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
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.
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)
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
29.09.2019, 09:44 (Dieser Beitrag wurde zuletzt bearbeitet: 29.09.2019, 09:56 von Gast 123.)
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)
29.09.2019, 10:43 (Dieser Beitrag wurde zuletzt bearbeitet: 29.09.2019, 10:43 von Rabe.)
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.
29.09.2019, 10:45 (Dieser Beitrag wurde zuletzt bearbeitet: 29.09.2019, 10:46 von Klaus-Dieter.)
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