Excel VBA: Wie mach ich aus einem Textfeld ein Suchfeld?
Hallo zusammen,
ich versuche gerade eine Datenbank in Excel anzulegen.
Jetzt möchte ich, dass egal in welchem Textfeld ich einen Suchbegriff eingebe, die entsprechende Spalte in Excel durchsucht wird und mir die Ergebnisse in einer Listbox angezeigt werden. Idealerweise soll man dann auf die Zeile in der Listbox klicken können und die Textfelder in meiner Userform Maske werden automatisch ausgefüllt. Ich bin ein totaler Neuling in Excel VBA und freue mich wenn mir jemand weiterhelfen kann!
Liebe Grüße
5 Antworten
Das ist jetzt nicht so auf die schnelle zusammengeschustert.
Du willst da ja gleich mehrere Sachen auf einmal abhandeln. Zum einen erst mal die Suche. Dann sollen die Suchergebnisse als Listbox erscheinen und dann diese noch in ein Userform übertragen werden.
Die Frage ist ja auch, was denn da nun wo eingetragen werden soll?
Vor allem, da man weder die Tabelle(n) noch die Userform kennt, kann man da im Grunde gar nicht wirklich antworten.
Ohne den Aufbau deiner "Datenbank" zu kennen und ohne die Userform zu kennen ist das eigentlich nicht möglich.
dass egal in welchem Textfeld
welche Textfelder?
die entsprechende Spalte in Excel durchsucht wird
Was ist die "entsprechende Spalte"?
Private Sub ComboBox1_Change()
'Suche Kundenname' Dim arr() As Variant, C As Variant Dim firstAddress As String Dim Y As Boolean Dim iRowU As Integer
If Len(ComboBox1.Value) > 2 Then With Worksheets("Kunden").Range("F1:F65536") Set C = .Find((ComboBox1.Value), LookIn:=xlValues) If Not C Is Nothing Then firstAddress = C.Address Y = True Do C.Interior.Pattern = xlPatternGray34 ReDim Preserve arr(1 To 8, 0 To iRowU) arr(1, iRowU) = .Cells(C.Row, 1) 'b iRowU = iRowU + 1 Set C = .FindNext(C) Loop While Not C Is Nothing And C.Address <> firstAddress End If End With
If Y = False Then MsgBox "kein Eintrag gefunden" Else ListBox1.Column = arr End If End If End Sub
Hier Wählst du in Combobox1 aus und trägst in Listbox1 ein.
Die MatchEntry eigenschaft muss auf Complete stehen.
Hey, danke für die Hilfe. Wenn ich das richtig verstehe, müsste ich den Code jetzt nur auf meine Textbox umschreiben oder ?
Ohje, habe mir das ganze wohl einfacher vorgestellt als gedacht.
Ich habe ein Bild meiner Userform anbei gefügt. Vielleicht wird dann etwas deutlicher was meine Absichten sind.
Vielen Dank schonmal für die schnellen Antworten!

Nun, um die Spaltennummer der jeweiligen Textbox festzulegen (also welche Spalte sie darstellt und welche danach durchsucht werden soll) kannst du die "Tag"-Eigenschaft der input-box nutzen. Dort schreibst du einfach die Spaltennummer rein. Der Rest wie gesagt: Autofilter und mit SpecialCells alles rausholen was angezeigt wird. Mach einfach mal das mit dem Autofilter, danach kann ich dir konkret weiterhelfen. Falls du Probleme hast schreib es hier drunter als Kommentar.
Du kannst das change-Event bei dem Textfeld verwenden und mit Autofilter immer die Daten im Tabellenblatt filtern. Dann kannst du mit SpecialCells alle die Zellen herausholen die sichtbar sind (also wo der Filter zutraf) und diese dann in der Listbox anzeigen. Du musst dich ein bisschen dazu einlesen, ich habe momentan nicht Zeit, die ganze Sache zu schreiben, ich helfe dir aber gerne bei kleineren Problemen.
VBA ist schön, nervig aber schön. Excel ist kein Platz für eine Datenbank, dafür gibt es viel bessere Programme, selbst ACCESS von Microsoft ist besser. Ansonsten MySql - wobei dies eher in der Webentwicklung angewendet wird.
Er meint mit "egal in welchem", dass er einige Textfelder hat die einer Spalte zugeordnet sind. Egal in welchem davon er was eingibt, wird die jeweilige Spalte durchsucht. Klar ist das möglich...