Listbox mit mehrspaltigem Array füllen in VBA
Schritt-für-Schritt-Anleitung
Um eine Listbox in Excel VBA mit einem mehrspaltigen Array zu füllen, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen:
-
Erstelle eine Funktion zur Suchimplementierung:
Definiere eine Funktion, die ein Suchwort als Parameter akzeptiert und ein mehrdimensionales Array zurückgibt.
Function fncListe(Optional sText As String)
Dim oDaten As Object
Dim arrListe(), arrTmp
Dim k As Long, i As Long
k = Worksheets("Liste").Cells(Rows.Count, 1).End(xlUp).Row
Set oDaten = CreateObject("Scripting.dictionary")
If k = 1 Then
ReDim Preserve arrListe(0)
fncListe = arrListe
Exit Function
Else
arrTmp = Worksheets("Liste").Range("G5:I" & k)
ReDim arrListe(1 To UBound(arrTmp))
For i = 1 To UBound(arrTmp)
If LCase(arrTmp(i, 1)) Like "*" & LCase(sText) & "*" Then
oDaten(arrTmp(i, 1)) = Array(arrTmp(i, 2), arrTmp(i, 3))
End If
Next
fncListe = oDaten.keys
End If
End Function
-
Fülle die Listbox in einer Subroutine:
Verwende eine Subroutine, um die Listbox mit den Daten aus der Funktion zu befüllen.
Private Sub DataAllFill_Suche()
Dim sText As String
Dim ArrayData
sText = objTBSuche.Text
With objLBDataDefinition
.ListFillRange = ""
.ColumnCount = 3
.ColumnWidths = "300;20;50"
ArrayData = fncListe(sText)
If IsArray(ArrayData) Then
.List = ArrayData
Else
MsgBox "Nichts gefunden"
End If
End With
End Sub
Häufige Fehler und Lösungen
Fehler: 381 - Eigenschaft List konnte nicht gesetzt werden.
- Ursache: Möglicherweise wurde nichts gefunden und das Array ist leer.
- Lösung: Überprüfe, ob das Array tatsächlich Daten enthält, bevor du versuchst, es der Listbox zuzuweisen. Verwende eine
If IsArray(ArrayData) Then-Bedingung.
Alternative Methoden
Eine Alternative zur Verwendung von Dictionaries ist das direkte Arbeiten mit einem mehrdimensionalen Array. Dies könnte wie folgt aussehen:
Function fncListeAlternative(Optional sText As String)
Dim arrListe(), i As Long, j As Long
Dim A As Long
A = Worksheets("Liste").Cells(Rows.Count, 1).End(xlUp).Row
If A <= 1 Then
ReDim arrListe(0)
fncListeAlternative = arrListe
Exit Function
End If
ReDim arrListe(1 To A, 1 To 3)
For i = 1 To A
If InStr(LCase(Worksheets("Liste").Cells(i, 1).Value), LCase(sText)) > 0 Then
arrListe(j, 1) = Worksheets("Liste").Cells(i, 1).Value
arrListe(j, 2) = Worksheets("Liste").Cells(i, 2).Value
arrListe(j, 3) = Worksheets("Liste").Cells(i, 3).Value
j = j + 1
End If
Next i
fncListeAlternative = arrListe
End Function
Praktische Beispiele
Hier ist ein einfaches Beispiel, das zeigt, wie du die Listbox mit Daten füllst:
- Erstelle eine Excel-Tabelle mit Werten in den Spalten G bis I.
- Verwende das oben genannte VBA-Skript, um eine Listbox zu erstellen, die auf die Eingabe eines Suchwortes reagiert.
Tipps für Profis
- Nutze
Dictionary-Objekte, um doppelte Einträge zu vermeiden und die Performance zu verbessern.
- Achte darauf, die
ColumnWidths korrekt zu setzen, um sicherzustellen, dass alle Spalten in der Listbox sichtbar sind.
- Verwende
Option Explicit, um sicherzustellen, dass alle Variablen deklariert werden.
FAQ: Häufige Fragen
1. Wie kann ich die Listbox mit mehr als drei Spalten füllen?
Um mehr Spalten hinzuzufügen, passe die ColumnCount und die ColumnWidths entsprechend an und erweitere dein Array.
2. Was mache ich, wenn die Listbox leer bleibt?
Überprüfe, ob dein Suchtext korrekt ist und ob es in der Datenquelle entsprechende Einträge gibt. Verwende Debugging-Tools in VBA, um den Status deiner Variablen zu überprüfen.