Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

leere zeilen des array in ListBox löscch

Forumthread: leere zeilen des array in ListBox löscch

leere zeilen des array in ListBox löscch
17.07.2020 09:25:37
JuliaZ
Hallo,
ich möchte mit Hilfe eines Arrays eine zweistufige Gliederung in einer ListBox wiedergeben. Soweit funktioniert die Wiedergabe auch einwandfrei, nur hab ich in der Gliederung, die in der Range auf dem WS Vorlage steht, einige leere Zeilen. Könnte mir jemand dabei helfen, die leeren Zeilen, evtl. mittels Schleife, nicht mit in den Array und in die ListBox zu übernehmen?
Private Sub UserForm_Initialize()
Dim arrListe
With ThisWorkbook.Worksheets("Vorlage")
zeile = .Cells(Rows.Count, 4).End(xlUp).Row
arrListe = .Range(.Cells(12, 4), .Cells(zeile, 5))
Me.ListBox1.List = arrListe
Erase arrListe
End With
End Sub

Danke und liebe Grüße,
Julia
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: leere zeilen des array in ListBox löscch
17.07.2020 10:03:34
Jörg
Hi, so ungefähr
With Listbox1
.Clear
For i=LBound(arrListe) to UBound(arrliste)
if not (arrListe(i,1)="" and arrListe(i,2)="") Then
.AddItem arrliste(i,1)
.List(.Listcount-1,1)=arrliste(i,2)   '.Listcount zählt ab 0
End IF
End With

AW: leere zeilen des array in ListBox löscch
22.07.2020 09:13:22
JuliaZ
Hallo Jörg,
leider bekomme ich in Zeile 3 einen Laufzeitfehler 9, ich habe mal versucht mit dim arrliste as Long bzw as variant eine Lösung zu finden, leider erfolglos. Vielleicht könnte mir ja nochmal jemand helfen.
Vielen Dank und LG
Anzeige
Die übrigen, über 5 Tage alten Antworten sind ...
22.07.2020 11:03:37
EtoPHG
dann wohl nix wert, Julia?
Gruess Hansueli
AW: Die übrigen, über 5 Tage alten Antworten sind ...
22.07.2020 14:27:18
JuliaZ
Hallo Hansueli,
die anderen Lösungen sind sicher nicht weniger gut, allerdings haben sie in meiner Anwendung nicht zufriedenstellend funktioniert, weshalb ich auf Basis einer anderen als Ihrer Lösung weitergearbeitet habe. Vielen Dank trotzdem für Ihre konstruktive Hilfe!
Anzeige
Dann ist das Problem nicht mehr offen! (owT)
22.07.2020 15:38:50
EtoPHG

AW: leere zeilen des array in ListBox löscch
17.07.2020 10:04:41
EtoPHG
Hallo Julia,
Ich werde aus deinem Codeschnipsel nicht klug.
Ist die Listbox 2 spaltig ? Oder wieso willst du Spalte 4 und 5 in das Array übertragen?
Vor Rows.Count fehlt ein Punkt!
Wieso überhaupt über einen Array befüllen, wenn du nachträglich noch aufräumen musst?
Warum nicht gleich über die Zeilen 'loopen' und nur in die Listbox addieren, wenn die Zelle nicht leer ist?
Was soll das Erase am Schluss bringen?
Gruess Hansueli
Gruess Hansueli
Anzeige
AW: leere zeilen des array in ListBox löscch
17.07.2020 10:36:26
Daniel
Hi
du kannst nicht benötigte Spalten wieder entfernen, dazu gibt's RemoveItem
das ist meisten einfacher zu programmieren, als die Listbox gleich passend zu befüllen.
...
arrListe = .Range(.Cells(12, 4), .Cells(zeile, 5))
with Listbox1
for i = .ListCount - 1 to 0 step - 1
if .List(i, 0) & .List(i, 1) = "" Then .RemoveItem i
next
end with
Gruß Daniel
Anzeige
Codevorschlag, RemoveItem
17.07.2020 11:25:34
EtoPHG
Hallo Julia,
vielleicht so:
Private Sub UserForm_Initialize()
Dim arrListe, zeile As Long
With ThisWorkbook.Worksheets("Vorlage")
zeile = .Cells(.Rows.Count, 4).End(xlUp).Row
arrListe = .Range(.Cells(12, 4), .Cells(zeile, 5))
End With
With ListBox1
.List = arrListe
For zeile = .ListCount - 1 To 0 Step -1
If .List(zeile) = "" And .List(zeile, 1) = "" Then .RemoveItem zeile
Next zeile
End With
End Sub
Gruess Hansueli
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Leere Zeilen in einer ListBox mit VBA entfernen


Schritt-für-Schritt-Anleitung

Um leere Zeilen aus einem Array in einer ListBox zu entfernen, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Initialisierung der UserForm: Du musst sicherstellen, dass die UserForm beim Start die Daten in die ListBox lädt.
  2. Array erstellen: Verwende VBA, um die Daten aus dem Arbeitsblatt in ein Array zu laden.
  3. Leere Zeilen filtern: Nutze eine Schleife, um nur die nicht leeren Zeilen in die ListBox zu übernehmen.

Hier ist ein Beispielcode, der diese Schritte umsetzt:

Private Sub UserForm_Initialize()
    Dim arrListe
    Dim zeile As Long
    With ThisWorkbook.Worksheets("Vorlage")
        zeile = .Cells(.Rows.Count, 4).End(xlUp).Row
        arrListe = .Range(.Cells(12, 4), .Cells(zeile, 5))
    End With
    With ListBox1
        .Clear
        For i = LBound(arrListe) To UBound(arrListe)
            If Not (arrListe(i, 1) = "" And arrListe(i, 2) = "") Then
                .AddItem arrListe(i, 1)
                .List(.ListCount - 1, 1) = arrListe(i, 2)
            End If
        Next i
    End With
End Sub

Häufige Fehler und Lösungen

Hier sind einige häufige Fehler, die bei der Implementierung auftreten können, und wie Du sie beheben kannst:

  • Laufzeitfehler 9: Dieser Fehler tritt auf, wenn Du auf ein Element zugreifen möchtest, das nicht existiert. Stelle sicher, dass Deine ListBox die richtige Anzahl an Spalten hat und dass alle Indizes korrekt sind.

  • Zugriff auf leere Zeilen: Wenn Du versuchst, leere Zeilen zu verarbeiten, kann es zu unerwartetem Verhalten kommen. Verwende die Schleifenbedingung, um nur nicht-leere Elemente hinzuzufügen.


Alternative Methoden

Anstatt leere Zeilen im Array zu filtern, kannst Du auch die RemoveItem-Methode verwenden, um nicht benötigte Elemente aus der ListBox zu entfernen. Beispiel:

With ListBox1
    For i = .ListCount - 1 To 0 Step -1
        If .List(i, 0) & .List(i, 1) = "" Then .RemoveItem i
    Next i
End With

Diese Methode kann die Programmierung vereinfachen, da Du die ListBox direkt von leeren Einträgen bereinigst.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie Du leere Zeilen entfernen kannst:

  1. Daten in die ListBox einfügen: Lade die Daten aus einem Arbeitsblatt in die ListBox.
  2. Leere Zeilen entfernen: Nutze die oben beschriebene Methode, um leere Zeilen zu filtern.

Die Kombination aus dem Laden der Daten und dem Entfernen der leeren Zeilen könnte so aussehen:

Private Sub UserForm_Initialize()
    Dim arrListe
    Dim zeile As Long
    With ThisWorkbook.Worksheets("Vorlage")
        zeile = .Cells(.Rows.Count, 4).End(xlUp).Row
        arrListe = .Range(.Cells(12, 4), .Cells(zeile, 5))
    End With
    With ListBox1
        .List = arrListe
        For zeile = .ListCount - 1 To 0 Step -1
            If .List(zeile) = "" And .List(zeile, 1) = "" Then .RemoveItem zeile
        Next zeile
    End With
End Sub

Tipps für Profis

  • Verwende Option Explicit: Setze am Anfang Deines Moduls Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler zu vermeiden.
  • Debugging: Nutze Debug.Print, um den Inhalt von Variablen während der Laufzeit zu überprüfen und Fehlerquellen schneller zu identifizieren.
  • Optimierung: Achte darauf, die ListBox nur einmal zu befüllen, um die Performance zu verbessern, insbesondere bei großen Datenmengen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine ListBox korrekt aktualisiert wird?
Stelle sicher, dass Du die ListBox nach dem Laden der Daten mit .Clear leerst, bevor Du sie erneut befüllst.

2. Was soll ich tun, wenn ich weiterhin Laufzeitfehler erhalte?
Überprüfe die Indizes und die Struktur Deiner Daten. Debugge Deinen Code schrittweise, um die genaue Fehlerstelle zu identifizieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige