ich habe auf einer Userform eine Listbox und eine Textbox. Ich will wenn ich in die Textbox ein Wort eingebe, dass er mir die Listbox durchsucht. Gibt es eine Möglichkeit dazu?
Danke
Private Sub TextBox1_Change()
Dim rngZelle As Range
Dim lngIndex As Long
Set rngZelle = Range(ListBox1.RowSource).Find(TextBox1.Value, lookat:=xlWhole)
If Not rngZelle Is Nothing Then
lngIndex = rngZelle.Row - Range(ListBox1.RowSource).Cells(1).Row
ListBox1.Selected(lngIndex) = True
End If
Set rngZelle = Nothing
End Sub
Private Sub TextBox1_Change()
Dim rngZelle As Range
Dim strStart As String
' Suchspalte anpassen
Set rngZelle = Columns(2).Find(TextBox1.Value, lookat:=xlWhole)
If Not rngZelle Is Nothing Then
strStart = rngZelle.Address
ListBox1.Clear
Do
' 1. Spalte der ListBox füllen (Spalte 0)
ListBox1.AddItem rngZelle.Value
' 2. Spalte der ListBox füllen (Spalte 1)
ListBox1.List(ListBox1.ListCount - 1, 1) = rngZelle.Offset(0, 1)
'... usw., maximal 10 Spalten möglich (also bis einschließlich , 9)
Set rngZelle = Columns(2).FindNext(rngZelle)
Loop While rngZelle.Address strStart
End If
Set rngZelle = Nothing
End Sub
Private Sub CommandButton3_Click()
'Variable deklarieren
Dim erste_freie_Zeile As Integer
'Zwischengespeicherte Datensatz-ZeilenZahl
'in Variable "erste_freie_Zeile" schreiben
If TextBox2.Tag = "" Then Exit Sub
erste_freie_Zeile = CLng(TextBox2.Tag)
'Spalte A, erste freie Zeile das Datum im Datumsformat übertragen
Activesheets.Cells(erste_freie_Zeile, 2) = VBA.Format(ComboBox2.Text)
TextBox2.Tag = ""
MsgBox "Die Daten wurden aktuallisiert", vbInformation
Unload Me
End Sub
was ist daran falsch?
ListBox1
) und einer Textbox (TextBox1
).Private Sub TextBox1_Change()
Dim rngZelle As Range
Dim strStart As String
' Suchspalte anpassen
Set rngZelle = Columns(2).Find(TextBox1.Value, lookat:=xlWhole)
If Not rngZelle Is Nothing Then
strStart = rngZelle.Address
ListBox1.Clear
Do
' 1. Spalte der ListBox füllen (Spalte 0)
ListBox1.AddItem rngZelle.Value
' 2. Spalte der ListBox füllen (Spalte 1)
ListBox1.List(ListBox1.ListCount - 1, 1) = rngZelle.Offset(0, 1)
Set rngZelle = Columns(2).FindNext(rngZelle)
Loop While rngZelle.Address <> strStart
End If
Set rngZelle = Nothing
End Sub
Fehler: "nicht näher bezeichneter Fehler" bei ListBox1.Clear
ListBox1
heißt. Es könnte sein, dass der Name anders lautet.Fehler: Textbox gibt keine Ergebnisse zurück
Fehler bei der Verwendung von RowSource
AddItem
zurückgreifen, anstatt RowSource
zu verwenden.Wenn du eine andere Methode zur Befüllung der Listbox in Betracht ziehst, kannst du die Find
- und FindNext
-Methoden in Kombination mit einer Schleife verwenden, um alle passenden Einträge zu finden und diese in die Listbox zu laden. Dies ist besonders nützlich, wenn du nicht nur nach einem exakten Treffer suchst, sondern nach Teilstrings.
Beispiel 1: Suche nach einem spezifischen Begriff
Beispiel 2: Suche nach mehreren Wörtern
If InStr(1, rngZelle.Value, TextBox1.Value, vbTextCompare) > 0 Then
' Eintrag hinzufügen
End If
Option Explicit
am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler zu vermeiden.Application.ScreenUpdating = False
am Anfang und Application.ScreenUpdating = True
am Ende deines Codes, um die Leistung zu verbessern, besonders bei umfangreichen Daten.1. Wie kann ich die Suchfunktion auf mehrere Spalten ausweiten?
Du kannst die Find
-Methode in einer Schleife für jede Spalte aufrufen, die du durchsuchen möchtest.
2. Was tun, wenn die Listbox nicht alle Einträge anzeigt? Überprüfe den Code und stelle sicher, dass die Schleife korrekt konfiguriert ist, um alle passenden Einträge zu erfassen. Achte auch darauf, dass die Daten in der Suchspalte vorhanden sind.
3. Kann ich die Listbox so einstellen, dass sie mehrere Auswahlmöglichkeiten zulässt?
Ja, setze die MultiSelect
-Eigenschaft der Listbox auf fmMultiSelectMulti
, um mehrere Auswahlen zu ermöglichen.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen