Listbox mit mehreren Textboxen durchsuchen
Schritt-für-Schritt-Anleitung
-
UserForm erstellen: Öffne Excel und erstelle eine neue UserForm. Füge mehrere Textboxen (z.B. TextBox1
, TextBox2
, TextBox3
) und eine Listbox (ListBox1
) hinzu.
-
ListBox konfigurieren: Setze die Spaltenanzahl der Listbox im Code:
UserForm1.ListBox1.ColumnCount = 5
-
Textboxen initialisieren: Füge im UserForm_Initialize
-Ereignis den Code zum Einlesen von Daten in die Listbox hinzu:
Call Daten_einlesen ' Modul1
-
Change-Ereignisse programmieren: Erstelle ein Change
-Ereignis für jede Textbox, das die aktualisieren
-Funktion aufruft:
Private Sub TextBox1_Change()
Call aktualisieren
End Sub
-
Aktualisierungslogik erstellen: Implementiere die aktualisieren
-Funktion, um die Listbox basierend auf dem Inhalt der Textboxen zu aktualisieren:
Private Sub aktualisieren()
Dim lngZeile As Long
Dim lngIndex As Long
Dim markieren As Boolean
With ListBox1
For lngZeile = 0 To .ListCount - 1
markieren = False
For lngIndex = 1 To 3
If Me.Controls("TextBox" & lngIndex) <> "" Then
Select Case lngIndex
Case 1, 2
If .List(lngZeile) Like "*" & Me.Controls("TextBox" & lngIndex) & "*" Then markieren = True
Case 3
If .List(lngZeile, 2) Like "*" & Me.Controls("TextBox" & lngIndex) & "*" Then markieren = True
End Select
End If
If markieren = True Then Exit For
Next
.Selected(lngZeile) = markieren
Next lngZeile
End With
End Sub
Häufige Fehler und Lösungen
-
Fehler bei der Listbox-Zuweisung: Stelle sicher, dass die Indizes in der Select Case
-Anweisung mit den tatsächlichen Spalten der Listbox übereinstimmen. Ein falscher Index führt zu unerwarteten Ergebnissen.
-
Markierungen werden nicht aktualisiert: Überprüfe die Logik im aktualisieren
-Code und stelle sicher, dass die markieren
-Variable korrekt gesetzt wird.
Alternative Methoden
-
Funktionen auslagern: Um den Code übersichtlicher zu gestalten, kannst du die Logik in separate Funktionen auslagern, die für jede Textbox zuständig sind. Dies hilft, die Wartbarkeit zu verbessern.
-
Datenbankanbindung: Wenn du mit großen Datenmengen arbeitest, könntest du in Erwägung ziehen, die Daten aus einer Datenbank zu laden und die Filterung dort durchzuführen.
Praktische Beispiele
Hier ist ein einfaches Beispiel für den Code in einer UserForm mit drei Textboxen:
Private Sub UserForm_Initialize()
UserForm1.ListBox1.ColumnCount = 3
UserForm1.ListBox1.AddItem "Eintrag 1"
UserForm1.ListBox1.AddItem "Eintrag 2"
UserForm1.ListBox1.AddItem "Eintrag 3"
End Sub
In diesem Beispiel wird die Listbox mit drei Einträgen gefüllt. Du kannst die Textboxen nutzen, um nach bestimmten Einträgen zu suchen.
Tipps für Profis
-
Groß-/Kleinschreibung ignorieren: Verwende UCase()
oder LCase()
, um die Groß-/Kleinschreibung beim Vergleich zu ignorieren.
If UCase(.List(lngZeile)) Like UCase(Me.Controls("TextBox" & lngIndex)) Then
-
Code optimieren: Vermeide die Wiederholung von Code durch die Verwendung von Schleifen und Funktionen. Dies macht deinen Code nicht nur kürzer, sondern auch leichter verständlich.
FAQ: Häufige Fragen
1. Wie viele Textboxen kann ich verwenden?
Du kannst beliebig viele Textboxen verwenden, musst jedoch sicherstellen, dass die Logik in der aktualisieren
-Funktion entsprechend angepasst wird.
2. Was passiert, wenn ich die Anzahl der Spalten in der Listbox ändere?
Wenn du die Anzahl der Spalten änderst, musst du die Select Case
-Anweisung entsprechend anpassen, um sicherzustellen, dass die richtigen Spalten für die jeweiligen Textboxen durchsucht werden.
3. Wie kann ich die Listbox zurücksetzen?
Du kannst eine Funktion erstellen, die alle Markierungen in der Listbox auf False
setzt. Dies kann nützlich sein, wenn du die Suche zurücksetzen möchtest.