Zweispaltige Listbox füllen

Hallo Experten,

versuche seit Tagen eine zweispaltige Listbox mit Daten zu füllen, nur irgendwie komme ich nicht auf die richtige Lösung.

Ich habe eine Excel-Tabelle, in der die Spalten 2 und 4 in die Listbox eingelesen werden sollen. So sieht mein bisheriger Code aus:

Do While Cells(Zeile, 1) „“
'nur aufnehmen, wenn in Spalte 4 etwas steht!
If Cells(Zeile, 4) „“ Then
lstDaten.AddItem Cells(Zeile, 2)
lstDaten.AddItem Cells(Zeile, 4)
End If
Zeile = Zeile + 1
Loop

Daß es so nicht funktioniert ist mir klar, die Werte werden hier untereinander und nicht nebeneinander geschrieben. Nur wie geht es richtig?

Kerstin

Ich habe eine Excel-Tabelle, in der die Spalten 2 und 4 in die
Listbox eingelesen werden sollen. So sieht mein bisheriger
Code aus:
Do While Cells(Zeile, 1) „“
'nur aufnehmen, wenn in Spalte 4 etwas steht!
If Cells(Zeile, 4) „“ Then
lstDaten.AddItem Cells(Zeile, 2)
lstDaten.AddItem Cells(Zeile, 4)
End If
Zeile = Zeile + 1
Loop

Hi Kerstin,
probiers mal so, Namen der Listbox musste noch anpassen.

Sub kerstin()
Set wks = Worksheets("Tabelle1")
With wks.ListBox1
 .ColumnCount = 2
 .ColumnWidths = "4cm;5cm"
 .Clear
 For n = 1 To wks.Range("A65536").End(xlUp).Row
 If wks.Cells(n, 4) "" Then
 .AddItem
 .List(z, 0) = wks.Cells(n, 2)
 .List(z, 1) = wks.Cells(n, 4)
 z = z + 1
 End If
 Next n
End With
Set wks = Nothing
End Sub

Gruß
Reinhard

Hi Kerstin,
probiers mal so, Namen der Listbox musste noch anpassen.

Sub kerstin()
Set wks = Worksheets(„Tabelle1“)
With wks.ListBox1
.ColumnCount = 2
.ColumnWidths = „4cm;5cm“
.Clear
For n = 1 To wks.Range(„A65536“).End(xlUp).Row

Hier müßte es evtl. „B65536“, da ja die Werte aus Spalte 2 und 4 eingelesen werden sollen

If wks.Cells(n, 4) „“ Then
.AddItem
.List(z, 0) = wks.Cells(n, 2)
.List(z, 1) = wks.Cells(n, 4)
z = z + 1
End If
Next n
End With
Set wks = Nothing
End SubGruß
Reinhard

Hallo Kirstin, hallo Reinhard,

eine Alternative ist die Daten erst in ein Feld einzulesen und dann an die ListBox zu übergeben. Hier wird die Auswahlliste jedesmal aktualisiert, wenn die Liste den Fokus bekommt (angewählt wird).

Private Sub ListBox2\_GotFocus()
 Dim ListboxData()
 Zeile = 1
 ZeileListe = 0
'Feldgröße wird angepaßt an Zahl der Zeilen mit Werten in Spalte D
 ReDim ListboxData(Application.WorksheetFunction.CountA(Range("D:smiley:")) - 1, 1)
 Do While Cells(Zeile, 2).Value ""
'nur aufnehmen, wenn in Spalte 4 etwas steht!
 If Cells(Zeile, 4).Value "" Then
 ListboxData(ZeileListe, 0) = Cells(Zeile, 2).Value
 ListboxData(ZeileListe, 1) = Cells(Zeile, 4).Value
 ZeileListe = ZeileListe + 1
 End If
 Zeile = Zeile + 1
 Loop
 ListBox2.List() = ListboxData
 ReDim ListboxData(0, 0)
End Sub

Gruß
Franz

Hallo Franz,

Sub kerstin()
Set wks = Worksheets(„Tabelle1“)
With wks.ListBox1
.ColumnCount = 2
.ColumnWidths = „4cm;5cm“
.Clear
For n = 1 To wks.Range(„A65536“).End(xlUp).Row

Hier müßte es evtl. „B65536“, da ja die Werte aus Spalte 2 und
4 eingelesen werden sollen

Nein, sie hatte ja ein Do While Cells(Zeile, 1) „“
Gruß
Reinhard

If wks.Cells(n, 4) „“ Then
.AddItem
.List(z, 0) = wks.Cells(n, 2)
.List(z, 1) = wks.Cells(n, 4)
z = z + 1
End If
Next n
End With
Set wks = Nothing
End Sub

For n = 1 To wks.Range(„A65536“).End(xlUp).Row

Hier müßte es evtl. „B65536“, da ja die Werte aus Spalte 2 und
4 eingelesen werden sollen

Nein, sie hatte ja ein Do While Cells(Zeile,

  1. „“
    Gruß
    Reinhard

Hallo Reinhard,
Ja da hast du recht.

Bleibt die Frage, ob Kerstin das genau so will. Also, wenn in Splate 1 und 4 ein Wert eingetragen ist, dann übernehme die Werte in Spalte 2 und 4 in die ListBox.
Gruß
Franz

Hallo Reinhard und Gerd,

Danke für die Hilfe! Hatte jedoch nicht erwähnt, daß sich die Listbox in einem Formular befindet.

Zur Info: das Problem habe ich gelöst, indem ich die 2 Spalten als String verknüpfe und in die Listbox eintrage. Und die Werte, die in der Listbox addiert werden sollten, addiere ich jetzt schon in der Schleife. So brauche ich keine Listbox mit 2 Spalten.

Grüße, Kerstin

Hallo Kerstin,

für ein Formular sieht die Sache genauso aus. In dem erfolgt die Zuweisung der Daten zur Listbox am Besten in der UserForm_Initialize-Prozedur.

Gruß
Franz

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