Effektive Methoden zur Befüllung von Listboxen in einer Excel UserForm
Heute zeige ich dir verschiedene Methoden, wie du eine Listbox in einer UserForm mit Daten aus einer Tabelle befüllen kannst.
Die Methoden im Überblick
Es gibt insgesamt drei Methoden, mit denen du eine Listbox füllen kannst:
- RowSource
- AddItem
- List: Range (Zellbereich) / Array
Ich zeige dir nicht nur die Anwendung dieser Methoden, sondern gebe dir auch einen Überblick über ihre jeweiligen Vor- und Nachteile.
Fünf entscheidende Faktoren
Um die Methoden zu vergleichen, betrachten wir fünf entscheidende Eigenschaften:
- Überschriften: Kann eine Überschrift leicht in die Listbox eingefügt werden?
- Spaltenanzahl: Kann die Listbox mehr als zehn Spalten enthalten?
- Zusammenhängende Daten: Können nicht zusammenhängende Daten in die Listbox eingefügt werden?
- Datenveränderung: Ist es möglich, Daten in der Listbox zu verändern?
- Verknüpfung mit Tabellendaten: Sind die Tabellendaten direkt mit der Listbox verknüpft?
RowSource
Nutzt einen Zellbereich als Datenquelle und erlaubt mehr als zehn Spalten einzufügen. Die Daten müssen zusammenhängend sein.
AddItem
Ist flexibel, aber bietet keine automatische Einbindung von Überschriften. Des Weiteren können damit nur bis zu zehn Spalten eingefügt werden.
List Range
Erlaubt das Einlesen einer kompletten Tabelle und unterstützt mehr als zehn Spalten. Die Daten müssen zusammenhängend sein.
List Array
Punktet durch Flexibilität. Erlaubt das Einlesen von nicht zusammenhängenden Daten und ermöglicht mehr als zehn Spalten.
Private Sub UserForm_Initialize()
'Allgemeine Einstellungen
'Überschrift
ListBox1.ColumnHeads = True
'Spaltenanzahl festlegen
ListBox1.ColumnCount = 11
'Spaltenbreite festlegen
ListBox1.ColumnWidths = "50;150;0"
'1. RowSource
ListBox1.RowSource = "Verkäufe!B12:B21"
ListBox1.RowSource = Tabelle1.Range("Verkaufsuebersicht").Address
ListBox1.RowSource = Tabelle1.Range("B12,B14").Address
'2. AddItem
Dim Zeile As Long
Dim Spalte As Long
'Schleife über alle Zeilen
For Zeile = 1 To Tabelle1.ListObjects("Verkaufsuebersicht").DataBodyRange.Rows.Count
'ListBox befüllen
ListBox1.AddItem Tabelle1.ListObjects("Verkaufsuebersicht").DataBodyRange(Zeile, 1)
For Spalte = 1 To 9
ListBox1.List(ListBox1.ListCount - 1, Spalte) = Tabelle1.ListObjects("Verkaufsuebersicht").DataBodyRange(Zeile, Spalte + 1)
Next Spalte
Next Zeile
'3.1 List mit Range
Dim rng As Range
Set rng = Tabelle1.Range("Verkaufsuebersicht[[Lfd. Nr.]:[Straße]]")
'ListBox1.List = rng.Value
'3.2 List mit Array
Dim arr As Variant
arr = rng
ListBox1.List = arr
End Sub
Um VBA zu lernen und besser zu verstehen, empfehle ich dir mein kostenloses Grundlagentraining, in dem ich dir die ersten Schritt in Excel-VBA zeige.
Fazit
In der Praxis zeigt sich, dass Änderungen in der Listbox, die über die AddItem-Methode befüllt wurde, einfach sind. Die RowSource-Methode bietet die direkte Verknüpfung mit Tabellendaten. Bei der List-Methode ist diese Verknüpfung nicht gegeben und Änderungen im Tabellenblatt spiegeln sich nicht automatisch in der Listbox wider.
Ich hoffe dir einen besseren Überblick über die Möglichkeiten zur Befüllung einer Listbox verschafft zu haben und wünsche dir viel Erfolg bei deinen Projekten.
Melde dich gerne für meinen Newsletter an und erhalte regelmäßig Tipps & Tricks rund um das Thema Excel VBA!