Die Listbox enthält eine Liste von Elementen, von denen eins (oder auch mehrere, s. Abbildung 202) ausgewählt wird. Listboxen können mehrspaltig sein.
Die wichtigsten Eigenschaften:
· Name
Mit diesem Namen kann das Element per Programm
angesprochen werden.
· ControlSource
In
diese Zelle der Excel-Tabelle wird das ausgewählte Element (bzw. der Index des gewählten Elements) ausgegeben. (s.a. BoundColumn)
· Value
Der Wert des ausgewählten Elements bzw. der
Index des Werts (beginnend mit Null)
· Text
Die Spalte, die der Benutzer sieht. Kann von
Value abweichen, abhängig von TextColumn und BoundColumn
· ListIndex
Index des
markierten Elements
· BoundColumn
Kennzeichnet die Spalte (beginnend mit 1
für die linke Spalte), aus der das Element ausgewählt werden soll.
Ist
BoundColumn =0, wird nur ein Index ausgegeben, der die Stellung des gewählten
Elements in der Liste wiedergibt.
· ColumnCount
Gibt die
Anzahl der Spalten an, die angezeigt werden soll.
Wenn ColumnCount =0,
werden keine Spalten angezeigt, bei -1 werden alle verfügbaren Spalten
angezeigt. (max. 10)
· RowSource
Gibt die
Quelle an, die eine Liste für ein Kombinationsfeld-Steuerelement
(ComboBox) oder Listenfeld-Steuerelement (ListBox) zur Verfügung
stellt.
Hier wird der Bereich der Excel-Tabelle ausgewählt, der die Elemente
enthält, die in die Listbox geladen werden sollen.(z.B.
A1:C6)
Beispiele:
Wenn der Bereich A1:A6 in der Tabelle benannt ist
(Emma), dann
Listbox1.rowsource = „Emma“ oder
A =
„Emma“
Listbox1.rowsource = A
Achtung: Wenn der Name eine benannte
Formel ist, funktioniert das nicht. Folgender Trick hilft dann weiter:
Private Sub UserForm_Initialize()
Dim A
A = „Tabelle1!“ &
Range("BereichNamen").Address
Me.cboDL.Rowsource = A
End Sub
BereichNamen benennt
eine Formel.
· TextColumn
gibt die Nummer der Spalte an, die der
Benutzer sehen soll
· ListCount
Die Anzahl der Elemente in der Liste
· TopIndex
Index des
Elements, das im sichtbaren Bereich des Listenfeldes an oberster Stelle
steht
· List
Mit List(i,j)
kann auf die Elemente der Liste zugegriffen werden
· AddItem
Fügt ein
Element zu einer Listbox hinzu
· Selected
Mehrere Elemente einer Listbox können
gleichzeitig ausgewählt werden, wenn die Multiselect-Eigenschaft auf True
gesetzt wird.
· RemoveItem
Das
ausgewählte Element wird gelöscht.
Soll der gesamte Inhalt der Liste gelöscht
werden, so benutzt man die Methode Clear.
Beispiele für Listboxen:
Abbildung 199, Listbox mit Werten aus der Tabelle laden
Set Bereich = Worksheets("Tabelle2").Range("G1:M1")
For Each C In Bereich
ListBox1.AddItem C
Next C
Das Codebeispiel zeigt, wie Elemente mit der AddItem –Eigenschaft geladen werden können.
Beispiel: Mehrspaltige Tabellen in einer Listbox dargestellen:
Abbildung 200, Mehrspaltige Listbox mit RowSource Eigenschaft füllen
ListBox1.ColumnCount = 3’ Listbox mit drei Spalten
ListBox1.RowSource = "B5:D10"’ Datenquelle
Abbildung 201, BoundColumn kennzeichnet die Spalte
Cells(6, 1).ClearContents
ListBox1.ControlSource = "a6"
'In diese Zelle wird ausgewähltes Element ausgegeben
ListBox1.BoundColumn = 1
Die Eigenschaft, die eine Excel-Zelle mit der Listbox verbindet, heißt nicht LinkedCell, sondern ControlSource.
Mit BoundColumn =1 wird das Element Donnerstag (Spalte 1) in die Tabelle2 eingefügt, BoundColumn =0 fügt den Index ein (im Beispiel: 3)
Abbildung 202, Mehrspaltige Listboxen, z.T. mit Multiselekt-Eigenschaft
Die beiden Listboxen werden mit einem Array gefüllt, Listbox1 ist horizontal, Listbox2 vertikal ausgerichtet.
ListBox1.List() = MyArray
ListBox2.Column() = MyArray
Vorstehende Codezeilen zeigen die Methode.
Wenn die Listbox zulassen soll, dass mehrere Elemente ausgewählt werden können, muss die Multiselekt-Eigenschaft gesetzt werden.
Abbildung 203, Elemente im Sichtfeld positionieren
ListBox1.TopIndex = 2
Die Eigenschaft TopIndex legt fest, welches Element einer größeren Liste zuoberst im sichtbaren Fenster erscheinen soll.
Abbildung 204, Kalender der nächsten Woche in der Listbox
For i = i To 7 + i - 1 'eine Woche, beginnend mit Sonntag
MeinArray(y, 0) = Format(Date + i, "dd.mm.yy")
MeinArray(y, 1) = Format(Date + i, "dddd")
y = y + 1
Next i
With ListBox1 ' Array in Listbox laden und den Sonntag markieren
.ColumnWidths = 60 'Spaltenbreite
.List() = MeinArray
.ListIndex = 0
End With
Ein Array wird aufgebaut und in die Listbox geladen.
Abbildung 205, Reihenfolge der Listenelemente verändern
Private Sub spSchieben_SpinUp()
'Ausgewähltes Element wird nach oben verschoben
Dim A, B
A = lstFrei.ListIndex
If A = -1 Or A = 0 Then
Exit Sub
End If
B = lstFrei.List(A)
lstFrei.List(A) = lstFrei.List(A - 1)
lstFrei.List(A - 1) = B
lstFrei.ListIndex = lstFrei.ListIndex - 1
End Sub
Mit der Eigenschaft ListIndex kann die Stellung der Elemente in der Liste manipuliert werden.
Die ListIndex-Eigenschaft enthält einen Index der ausgewählten Zeile in einer Liste. Die Werte von ListIndex liegen im Bereich von -1 bis zur Gesamtanzahl der Zeilen in einer Liste - 1 (d.h. ListCount - 1). Wenn keine Zeilen ausgewählt sind, gibt ListIndex den Wert -1 zurück. Wenn der Benutzer eine Zeile in einem Listenfeld-Steuerelement oder Kombinationsfeld-Steuerelement auswählt, legt das System den Wert für ListIndex fest. Der Wert für ListIndex der ersten Zeile in einer Liste ist 0, der Wert der zweiten Zeile ist 1 usw.
Beispiel-Arbeitsmappe Listbox.xlsm