3.4k Aufrufe
Gefragt in Tabellenkalkulation von
Hello,

ich komme nicht weiter, ich brauche wieder mal Eure Hilfe :-)
Ich möchte ein Listbox erstellen mit 2 spalten und die leeren zeilen nicht angezeigt wird. Das klappt einfach nicht.

Hier mein Code:

With ListBox1
.ColumnCount = 2
.Clear
.ColumnWidths = "200;80"

End With

Loletzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
For LoI = 8 To Loletzte

ListBox1.AddItem Cells(LoI, 1)
ListBox1.List(LoI - 8, 1) = Cells(LoI, spalte_Zahl)
Next LoI





2. Frage

Wie kann ich dann, wenn die Leeren Zeilen nicht sichtbar sind
die richtige Zelladresse ermitteln?


Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

'MsgBox ListBox1.List(ListBox1.ListIndex, 0)

ZeileIndex1 = Me.ListBox1.ListIndex

ActiveSheet.Cells(ZeileIndex1, 1).Select

End Sub


Danke
Joana

12 Antworten

0 Punkte
Beantwortet von rudi4ad Mitglied (167 Punkte)
Hallo

Das Array (oder der array) ist in diesem Fall ein Container, der nur die Zeilen enthält, die in der Listbox aufgelistet werden sollen. Die Reihenfolge der Zeilen ist nun nicht mehr gleich der Reihenfolge der Zeilen in der Tabelle. Über den Index kann also die Zelle nicht wieder gefunden werden.

Eine möglichkeit wäre:
Dim arr() As Variant
Dim iRow As Long
Dim iRowL As Long
Dim iCol As Long
Dim iRowU As Long
ListBox1.Clear
iRowL = Cells(Rows.Count, 1).End(xlUp).Row 'letzte Zeile in Spalte 1
For iRow = 8 To iRowL
If Not IsEmpty(Cells(iRow, 1)) Then
ReDim Preserve arr(0 To 2, 0 To iRowU)
arr(0, iRowU) = Cells(iRow, 1)
arr(1, iRowU) = Cells(iRow, 5)
arr(2, iRowU) = Cells(iRow, 5).Row
iRowU = iRowU + 1
End If
Next iRow
ListBox1.Column = arr

Damit hat der array 3 Spalten. In der 3. Spalte wird die Zeilennummer gespeichert.
Eine Spalte kann man in einer Listbox ausblenden, in dem man die Breite auf 0 setzt.
setze nun:
ColumnCount = 3
ColumnWidths = "200;80;0"
BoundColumn=3

Die Wert-Eigenschaft des Steuerelements enthält nun den Wert aus der 3.Spalte

Zur Kontrolle:
Private Sub ListBox1_Click()
MsgBox ListBox1.Value
End Sub

Cells(ListBox1.Value,5) ist die Zelle, die du suchst.

Gruß
Rudi
0 Punkte
Beantwortet von
Jetzt alles Super

Vielen Dank, Rudi.
...