VBA: Mehrspaltige Listenfelder

Hallo Experten,

wie kann ich ein mehrspaltiges Listenfeld programmieren ohne Daten aus einer Tabelle einlesen zu müssen?

Vielen Dank schonmal.

Gruß
Thomas

Hallo Thomas,

du muss die die Daten für das Listenfeld in ein zweidimensionales Feld(Array) schreiben. Anschließend kannst du dieses Feld der Listbox als Auswahlliste zuweisen.

Gruß
Franz

Hier ein Beispielcode für eine Steuerelement-Listbox in der Tabelle. Die Liste wird jeweils neu berechnet wenn man die Listbox anklickt. Evtl. macht es auch Sinn den Code mit entsprechenden Anpassungen in der Workbook_Open oder Sheet_Activate Prozedur anzulegen. Für eine Formular-Listbox kann man ähnlich vorgehen. Hier sollte der Code dann in der Initilisierungs-Prozedur des Formulars stehen.

Private Sub ListBox1\_GotFocus()
 'Formatieren und Auswahlliste erzeugen wenn Listbox angeklickt wird
 Dim Spalte1, Spalte2, Spalte3, i As Integer, Listdaten(), Wert, index As Integer
 Spalte1 = Array("A", "B", "C", "D", "E")
 Spalte2 = Array("Beschreibung A", "Beschreibung B", "Beschreibung C", "Beschreibung D", "Beschreibung E")
 Spalte3 = Array(1, 2, 3, 4, 5)
 Wert = Me.Range(Me.ListBox1.LinkedCell) ' Wert der Listbox aus Tabelle auslesen
 ReDim Listdaten(0 To UBound(Spalte1), 0 To 2)
 With Me.ListBox1
 .ColumnCount = 3
 .BoundColumn = 3
 .ColumnWidths = "20Pt;90Pt;20Pt"
 .Width = 140
 .Height = 80
 For i = 0 To UBound(Spalte1)
 Listdaten(i, 0) = Spalte1(i)
 Listdaten(i, 1) = Spalte2(i)
 Listdaten(i, 2) = Spalte3(i)
 If .BoundColumn = 0 Then
 index = Wert
 Else
 If Wert = Listdaten(i, .BoundColumn - 1) Then index = i
 End If
 Next
 .List = Listdaten
 .ListIndex = index
 End With
End Sub

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Franz,

bin erst gestern Abend dazu gekommen deinen Code auszuprobieren.
Herzlichen Dank, genau so haben ich mir mein Listenfeld vorgestellt.

Schöne Grüße
Thomas