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 hajo_zi Experte (9.1k Punkte)
Hallo Joana,

in Deinen Code prüfst Du niocht die Zeilenhöhe.
Benutze eine Spalte mit Spaltenbreite 0 in der ListBox und schreibe dort die Zeile rein.

Gruß Hajo
0 Punkte
Beantwortet von
Hallo,

kann mir den keiner helfen den Code zu erweitern?


Joana
0 Punkte
Beantwortet von rudi4ad Mitglied (167 Punkte)
Hallo Joana,

das geht nicht. Die ListBox kennt keine Methode, mit der leere Zellen nicht angezeigt oder ausgeblendet werden.

Du musst jede Zeile, die Werte enthält, einzeln einlesen. Z.B.:
If len(LoI,1) then ListBox1.AddItem ...

oder du liest die Zeilen, die Werte enthalten erst in ein Array ein und übergibst dieses dann der List-Eigenschaft. Das lohnt sich aber bei 8 Zeilen nicht.

Gruß
Rudi
0 Punkte
Beantwortet von
Hallo Rudi,

danke für deine Antwort.

Kannst du mir bitte den Code aufschreiben.
Ich bin doch ein Anfängerin :-)

Die Zeile fängt bei mir bei 8 an und endet bei 700

Danke
Joana
0 Punkte
Beantwortet von rudi4ad Mitglied (167 Punkte)
Hallo Joana,
achso, es beginnt in Zeile 8, da hab ich mich verlesen.
Ein Beispiel
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 1, 0 To iRowU)
arr(0, iRowU) = Cells(iRow, 1)
arr(1, iRowU) = Cells(iRow, 2)
iRowU = iRowU + 1
End If
Next iRow
ListBox1.Column = arr


Gruß
Rudi
0 Punkte
Beantwortet von
Hallo Rudi,

das sieht sehr gut aus und sehr schnell ist die Array.
Aber mir fehlt die 2. spalte „E“ .
Kannst du das bitte zeigen, wie das geht

Vielen lieben Dank
Joana
0 Punkte
Beantwortet von rudi4ad Mitglied (167 Punkte)
Hallo Joana,
also dann ist die erste Spalte A und die zweite Spalte E.
Das wusste ich ja nicht. Dann heißt es :
arr(1, iRowU) = Cells(iRow, 2)

Gruß
Rudi
p.s. wenn ich mich hier nur zeit-verzögert melde, nicht wundern. Ich sitze nicht den ganzen Tag vor'm PC.
0 Punkte
Beantwortet von rudi4ad Mitglied (167 Punkte)
5 für Spalte E
arr(1, iRowU) = Cells(iRow, 5)
0 Punkte
Beantwortet von
Guten Abend Rudi,

vielen Dank für deine hilfe.

Es ist jetzt Perferkt wie ich es haben wollte.


Danke Danke nochmal

.. LG Joana
0 Punkte
Beantwortet von
Guten Abend,

ich habe wieder ein Problem. Ich kenne mich mit array nicht aus.

Wie bekomme ich hin, das wenn ich auf die Selektierte zeile in Listbox anklicke, die richtige zelladresse in der Tabelle ausgewählt wird.

Damit ich in der 2. spalte den Wert ändern kann



Gruß Joana
...