Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Mit Textbox suchen

Mit Textbox suchen
17.03.2021 09:33:20
oraculix
Hallo
Ich möchte gerne über Eingabe in Textbox3 in der Iistbox1 Suchen
Die Daten kommen aus Spalte A;B Tabelle FilmDB. in die Listbox1
Leider kann ich die Mappe nicht hochladen weil sie zu groß ist.
Frage : wie Suche ich in Textbox und zeige das ergebniss in Listbox an?

Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit Textbox suchen
17.03.2021 09:42:18
ralf_b
im textbox_change Ereignis
durch die Listboxdaten mittel Code-Schleife und die Werte entsprechend vergleichen.
Entweder du entfernst die nicht zutreffenden Listboxzeilen oder du ersetzt die ganze Liste mit einem Array aus den Suchergebnissen.
gruß
rb

AW: Mit Textbox suchen
17.03.2021 09:47:15
oraculix
Danke für die rasche Antwort
Habe was gelesen von Textbox Change Ereigniß aber wie bin ja vba Anfänger hast ein Makro?

Anzeige
habe keinen fertigen Code dafür .....
17.03.2021 09:59:44
ralf_b
Wenn du nicht weis was diese Ereignisse sind, dann eigne dir dieses Wissen an. Du hast schon einige Threads hier. Darin sind auch diverse Codes. Auch für Events. Man sollte denken du beschäftigst dich mit dem Thema.
gruß
rb

AW: habe keinen fertigen Code dafür .....
17.03.2021 10:11:26
oraculix
ich habe einen code gefunden aber der gibt immer eine msgbox aus wie kann ich das ändern das er mir nur die treffer zeigt in listbox?
Private Sub CommandButton8_Click()
Dim feld() As String, index1 As Integer, index2 As Integer, index3 As Integer, gefunden As  _
Boolean
If Len(TextBox3) > 2 Then
For index1 = Len(TextBox3) To 3 Step -1
For index2 = 1 To Len(TextBox1) - index1 + 1
index3 = index3 + 1
ReDim Preserve feld(1 To index3)
feld(index3) = Mid(TextBox3, index2, index1)
Next
Next
For index1 = 1 To UBound(feld)
For index2 = 0 To ListBox1.ColumnCount - 1
For index3 = 0 To ListBox1.ListCount - 1
If InStr(1, LCase(ListBox1.List(index3, index2)), LCase(feld(index1))) > 0  _
Then
ListBox1.Selected(index3) = True
gefunden = True
If MsgBox("Weitersuchen.", 36, "Frage") = 7 Then Exit Sub
End If
Next
Next
Next
If Not gefunden Then MsgBox "Suchbegriff nicht gefunden.", 64, "Information" Else  _
MsgBox "Keine weitere Übereinstimmung gefunden", 64, "Information"
Else
MsgBox "Suchbegriff muss mindestens dreistellig sein.", 48, "Hinweis"
End If
End Sub

Private Sub UserForm_Activate()
TextBox1.SetFocus
End Sub


Anzeige
AW: Mit Textbox suchen
17.03.2021 10:13:36
Rudi
Hallo,
Die Daten kommen aus Spalte A;B Tabelle FilmDB.
dann such doch da.
Gruß
Rudi

AW: Mit Textbox suchen
17.03.2021 10:21:23
oraculix
Wenn ich wüsste wie das geht müsste ich aber hier nicht fragen

AW: Mit Textbox suchen
17.03.2021 10:30:36
Rudi
Hallo,
sowas?
Private Sub TextBox1_Change()
Dim vArr, i As Long
Dim strMatch As String
strMatch = "*" & LCase(TextBox1) & "*"
vArr = ListBox1.List
For i = 0 To UBound(vArr)
ListBox1.Selected(i) = (LCase(vArr(i, 0)) Like strMatch Or LCase(vArr(i, 1)) Like strMatch)  _
And strMatch  "**"
Next
End Sub

Gruß
Rudi

Anzeige
AW: Mit Textbox suchen
17.03.2021 10:44:44
oraculix
Danke erst mal aber
ich möchte das die listbox1 nur alle treffer anzeigt alles andere sollte gelöscht werden

Recherche: Listbox filtern. owT
17.03.2021 11:11:37
Rudi

AW: Recherche: Listbox filtern. owT
17.03.2021 11:28:17
oraculix
Ich versuche es nochmal zu beschreiben
Nach eingabe in Texbox3 sollen alle gefundenen Werte in listbox1 gelistet werden.
Alle einträge die nicht gesucht werden sollen aus der listbox1 gelöscht werden.
Also bleiben in Listbox1 nur die Suchtreffer über.

Anzeige
das ist mir klar.
17.03.2021 11:51:41
Rudi
im Archiv gibt es etliche Lösungen.
Gruß
Rudi

AW: das ist mir klar.
17.03.2021 11:56:44
oraculix
Habe ich schon durchsucht finde aber nicht hast du wenigstens einen Link?

Beispielcode
17.03.2021 13:40:02
Rudi

Private Sub TextBox1_Change()
Dim vntARR, i As Long
Dim strMatch As String
Dim objList As Object
strMatch = "*" & LCase(TextBox1) & "*"
Set objList = CreateObject("scripting.dictionary")
vntARR = Sheets(1).Cells(1, 1).CurrentRegion
For i = 1 To UBound(vntARR)
If (LCase(vntARR(i, 1)) Like strMatch Or LCase(vntARR(i, 2)) Like strMatch) Then
objList(i) = Array(vntARR(i, 1), vntARR(i, 2))
End If
Next i
ListBox1.Clear
If objList.Count Then
If objList.Count > 1 Then
vntARR = Application.Transpose(Application.Transpose(objList.items))
ListBox1.List = vntARR
Else
vntARR = objList.items
ListBox1.AddItem vntARR(0)(0)
ListBox1.List(0, 1) = vntARR(0)(1)
End If
End If
Set objList = Nothing
End Sub
Gruß
Rudi

Anzeige
AW: Beispielcode
17.03.2021 16:21:50
oraculix
Danke sieht gut aus der Code.
Aber da ist ein Fehler der mir Angezeigt wird
ListBox1.Clear wird Gelb angezeigt.
Anscheinend kann er die Listbox1 nicht löschen
Hier der Eintrag der die Listbox1 füllt
'Tabelle FilmDB Spalte A und B in Listbox1 anzeigen
Private Sub UserForm_Initialize()
With ListBox1
.ColumnCount = 2
.ColumnWidths = "6cm;6cm"
.ColumnHeads = False
ListBox1.RowSource = "FilmDB!A2:B3000"
ListBox1.ListIndex = ListBox1.ListCount - 2900
End With
End Sub


Anzeige
AW: Beispielcode
17.03.2021 18:41:07
ralf_b
das liegt vermutlich an der .Rowsource.
entweder du nutzt rowsource um die Werte der Listbox mit den Tabelleninhalten zu "verknüpfen".
Dann mußt du die Tabellenwerte in der Tabelle bearbeiten und die Änderung wird in der Listbox sichtbar.
Oder du nutzt .List und fügst den Inhalt eines Datenbereiches in die Listbox ein. dann ändert sich nichts an den Tabellenwerten, weil nicht miteinander verknüpft.
.Clear geht dann nur bei Nutzung von .List.

Anzeige
AW: Beispielcode
18.03.2021 10:10:14
Rudi
Hallo,
du darfst .RowSource nicht setzen.
Private Sub UserForm_Initialize()
With ListBox1
.ColumnCount = 2
.ColumnWidths = "6cm;6cm"
.ColumnHeads = False
.List = Worksheets("FilmDB").Range("A2:B3000").Value
.ListIndex = .ListCount - 2900
End With
End Sub

Gruß
Rudi
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Mit Textbox in ListBox suchen und filtern


Schritt-für-Schritt-Anleitung

Um mit einer Textbox in einer ListBox zu suchen und die Treffer anzuzeigen, kannst du die folgenden Schritte befolgen. Dieses Beispiel geht von der Verwendung von VBA in Excel aus.

  1. Erstelle eine UserForm: Füge eine UserForm in deinem Excel-Projekt hinzu.

  2. Füge eine TextBox und eine ListBox hinzu: Platziere eine TextBox (z.B. TextBox1) und eine ListBox (z.B. ListBox1) auf der UserForm.

  3. Initialisiere die ListBox: Füge den folgenden Code in das UserForm_Initialize-Ereignis ein, um die ListBox mit Daten aus der Tabelle FilmDB zu füllen.

    Private Sub UserForm_Initialize()
       With ListBox1
           .ColumnCount = 2
           .ColumnWidths = "6cm;6cm"
           .List = Worksheets("FilmDB").Range("A2:B3000").Value
       End With
    End Sub
  4. Füge den Suchcode hinzu: Verwende den folgenden Code im TextBox1_Change-Ereignis, um die ListBox basierend auf der Eingabe in der TextBox zu filtern:

    Private Sub TextBox1_Change()
       Dim vntARR, i As Long
       Dim strMatch As String
       Dim objList As Object
       strMatch = "*" & LCase(TextBox1) & "*"
       Set objList = CreateObject("scripting.dictionary")
       vntARR = Worksheets("FilmDB").Range("A2:B3000").Value
    
       For i = 1 To UBound(vntARR)
           If (LCase(vntARR(i, 1)) Like strMatch Or LCase(vntARR(i, 2)) Like strMatch) Then
               objList(i) = Array(vntARR(i, 1), vntARR(i, 2))
           End If
       Next i
    
       ListBox1.Clear
       If objList.Count Then
           ListBox1.List = Application.Transpose(Application.Transpose(objList.items))
       End If
    
       Set objList = Nothing
    End Sub

Häufige Fehler und Lösungen

  • ListBox1.Clear funktioniert nicht: Dies könnte daran liegen, dass die RowSource für die ListBox gesetzt ist. Stelle sicher, dass du die ListBox mit .List und nicht mit RowSource füllst, um die .Clear-Methode verwenden zu können.

  • Suchergebnisse werden nicht angezeigt: Überprüfe, ob die Daten in der Tabelle FilmDB vorhanden sind und ob die Filterbedingungen im Code richtig gesetzt sind.


Alternative Methoden

Eine alternative Methode ist die Verwendung von Array-Formeln oder Excel-Funktionen wie FILTER, um die Daten in Excel zu filtern, bevor du sie in die ListBox einfügst. Diese Methode erfordert jedoch Excel 365 oder Excel 2021.


Praktische Beispiele

Ein praktisches Beispiel wäre, die UserForm so zu gestalten, dass sie eine Liste von Filmen aus der FilmDB-Tabelle anzeigt. Bei der Eingabe eines Teils des Filmtitels in TextBox1 sollten nur die passenden Titel in ListBox1 angezeigt werden.


Tipps für Profis

  • Nutze Option Explicit am Anfang deines VBA-Moduls, um sicherzustellen, dass du alle Variablen deklarierst. Dies hilft, Fehler zu vermeiden.
  • Experimentiere mit Like-Operatoren für flexiblere Suchabfragen.
  • Wenn du mit großen Datenmengen arbeitest, kann die Verwendung von Arrays die Leistung verbessern.

FAQ: Häufige Fragen

1. Wie kann ich die ListBox so einstellen, dass sie nur die Treffer anzeigt? Um die ListBox nur mit den Suchtreffern zu füllen, verwende ListBox1.Clear vor dem Füllen der Liste mit gefilterten Ergebnissen.

2. Was mache ich, wenn die ListBox nicht gefüllt wird? Stelle sicher, dass die Daten in der angegebenen Range korrekt sind und dass die Logik für die Filterung in deinem Code funktioniert. Überprüfe auch, ob die UserForm korrekt initialisiert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige