ListRows.Add stoppt unerklätrlicherweise nach erstem Wert
30.01.2024 08:30:55
StefanEgg
ich muss vorab klarstellen, dass ich im Bereich VBA eher ein schlichter Amatuer bin, der sich bereits an vielen Dingen ausprobiert hat und bis dato mit der Hilfe von Google, Youtube, oder aber auch diesem Forum hier immer irgendwie an sein Ziel gekommen ist (mal mehr und mal weniger elegant). So war es auch bei meinem letzten Projekt. Ich hatte eine Excel-Datei programmiert, bei der ich unteranderem aus einer Userform und darin abgebildeten ListBoxen mit Multiselect eine intelligente Tabelle auf dem Arbeitsblatt habe befüllen lassen. Dies funktionierte reibungslos auch über die insgesamt 18 verschiedenen ListBoxen in dieser Userform. Alle ausgewählten Zeilen wurden der Reihe nach in die intelligente Tabelle eingetragen.
Aufgrund einer Anpassung im diesem Dokument (ich habe nur Werte abgeändert, die mit keiner der Tabellen, ListBoxen oder geschweige denn dem Code zu tun haben) funktioniert der Code auf einmal nicht mehr wie er soll. Wenn ich nun die Userform ausführe läuft diese ohne Fehlermeldung durch. Allerdings wird einzig und allein die erste ausgewählte Zeile aus der ersten ausgewählten ListBox in die intelligente Tabelle übertragen. Es ist mir unerklärlich. Ich habe sogar bereits die Datei komplett neu gebaut, Userform neu erstellt, den Code neu abgetippt usw. Alles ohne Erfolg.
Nehme ich hingegen die ListRow.Add funktion hinaus und lasse mir über eine MsgBox die Werte aller markierten Zeilen der ListBox ausgeben funktioniert auch die MultiSelect-Funktion fehlerfrei und er spuckt mir alles korrekt hinaus. Er geht dabei wie er soll ListBox für ListBox durch und gibt mir die Werte aller ausgewählten Einträge aus. Demnach muss irgendetwas bei der If-Funktion, die für die Eintragung der Zeilen in die intelligente Tabelle zuständig, ist nach der ersten Zeile abbrechen (ohne Fehlermeldung).
Vielleicht ist hier ja jemand mit der Problematik vertraut. Wie gesagt: Am Code, der vor der Änderung funktionierte, hat sich rein gar nichts verändert.
Ich bedanke mich bereits im Vorfeld für Eure Hilfe.
So sieht übrigens in beiden Fällen der Code für die Eintragung aus:
'Tabelle einlesen
Set tbl = Worksheets("Verwendungseignung").ListObjects("tblPrüfungVerw")
If Not tbl.DataBodyRange Is Nothing Then tbl.DataBodyRange.Delete
'Schleife über alle Elemente der Listbox
For Zeile = 0 To ListBox1.ListCount - 1
'Prüfen ob Element ausgew. ist
If ListBox1.Selected(Zeile) = True Then
'Neue zeile in Tabelle einfügen
Set lr = tbl.ListRows.Add
'Zeile Befüllen
lr.Range(1, 1).Value = ListBox1.List(Zeile, 0)
lr.Range(1, 2).Value = ListBox1.List(Zeile, 1)
lr.Range(1, 3).Value = ListBox1.List(Zeile, 2)
lr.Range(1, 4).Value = ListBox1.List(Zeile, 3)
lr.Range(1, 5).Value = ListBox1.List(Zeile, 4)
lr.Range(1, 6).Value = ListBox1.List(Zeile, 5)
lr.Range(1, 7).Value = ListBox1.List(Zeile, 6)
lr.Range(1, 8).Value = ListBox1.List(Zeile, 7)
lr.Range(1, 9).Value = ListBox1.List(Zeile, 8)
lr.Range(1, 10).Value = ListBox1.List(Zeile, 9)
lr.Range(1, 11).Value = ListBox1.List(Zeile, 10)
lr.Range(1, 12).Value = ListBox1.List(Zeile, 11)
lr.Range(1, 13).Value = ListBox1.List(Zeile, 12)
lr.Range(1, 14).Value = ListBox1.List(Zeile, 13)
lr.Range(1, 15).Value = ListBox1.List(Zeile, 14)
lr.Range(1, 16).Value = ListBox1.List(Zeile, 15)
lr.Range(1, 17).Value = ListBox1.List(Zeile, 16)
End If
Next Zeile
'TRENNER ----------------------------
For Zeile1 = 0 To ListBox2.ListCount - 1
'Prüfen ob Element ausgew. ist
If ListBox2.Selected(Zeile1) = True Then
'Neue zeile in Tabelle einfügen
Set lr = tbl.ListRows.Add
'Zeile Befüllen
lr.Range(1, 1).Value = ListBox2.List(Zeile1, 0)
lr.Range(1, 2).Value = ListBox2.List(Zeile1, 1)
lr.Range(1, 3).Value = ListBox2.List(Zeile1, 2)
[usw.]