Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1960to1964
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ListRows.Add stoppt unerklätrlicherweise nach erstem Wert

ListRows.Add stoppt unerklätrlicherweise nach erstem Wert
30.01.2024 08:30:55
StefanEgg
Moin moin zusammen,

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.]


9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListRows.Add stoppt unerklätrlicherweise nach erstem Wert
30.01.2024 10:16:12
Alwin Weisangler
Hallo,

der Fehler dürfte in den Variablen zu finden sein. Da du diese nicht zeigst, kann man nur raten.
Korrekte Dimensionierung wäre so:

Dim lr As ListRow
Dim tbl As ListObject

Gruß Uwe
AW: ListRows.Add stoppt unerklätrlicherweise nach erstem Wert
30.01.2024 10:59:27
StefanEgg
Moin Uwe, danke für den Hinweis.
Beim nächsten Mal werde ich auf alle Fälle die Variablen mit einbetten.
Sind aber beide so definiert wie du es auch beschrieben hast. Hier liegt der Fehler also leider nicht.
AW: ListRows.Add stoppt unerklätrlicherweise nach erstem Wert
30.01.2024 10:23:34
onur
Bei einer For-Next-Schleife wird der Endwert nur EINMAL bei Beginn der Schleife errechnet und dieser Wert für alle Durchgänge benutzt.
Dieses Makro ergibt KEINE Endlosschleife, da x=2 war und der "To"-Wert nicht verändert wird (so wie bei dir ListCount)
Dim x, n

x = 2
For n = 1 To x
x = n
DoEvents
Next n
Anzeige
AW: ListRows.Add stoppt unerklätrlicherweise nach erstem Wert
30.01.2024 11:02:43
StefanEgg
Moin Onur, aber für die einzelne ListBox ergibt sich somit ja als To-Wert der Gesamtwert aller Zeilen in der ListBox. Demnach dürfte durch diese Schleife die erste bis letzte Zeile überprüft werden. Für jede der einzelnen ListBoxen wird der To-Wert von mir dann ja noch mal vor der nächsten Schleife neu definiert. Das dürfte meines Erachtens nach also eigentlich passen.
AW: ListRows.Add stoppt unerklätrlicherweise nach erstem Wert
30.01.2024 11:09:01
onur
"die erste bis letzte Zeile überprüft werden" Die Letzte bei Start der Schleife bereits vorhandenen Zeilen. Alle hinzugefügten werden ignoriert.
Wenn Listbox.ListCount bei Start der Schleife 1 war, wird die Schleife nur EINMAL ausgeführt und damit Schluss.
Anzeige
AW: ListRows.Add stoppt unerklätrlicherweise nach erstem Wert
30.01.2024 11:14:24
onur
Wieviel du innerhalb der Schleife an Zeilen hinzufügst, ist völlig irrelvant.
AW: ListRows.Add stoppt unerklätrlicherweise nach erstem Wert
30.01.2024 12:07:10
StefanEgg
Aber die Anzahl der Zeilen in der ListBox ist immer fest und die verändert sich nie. Dementsprechend ist bei ListBox1 bspw. ListCount -1 immer 24, demnach sollte er bei der schleife doch immer von Zeile 0 - 24 überprüfen ob die entsprechende Zeile selected ist und demnach dann alle ausgewählten in die intelligente Tabelle übertragen.
AW: ListRows.Add stoppt unerklätrlicherweise nach erstem Wert
30.01.2024 12:25:26
onur
Sorry, mehr nur gegen (Beispiels-) Datei.
Denn alles andere ist, wie du siehst, nur Herumraterei.
AW: ListRows.Add stoppt unerklätrlicherweise nach erstem Wert
30.01.2024 10:29:08
FranziskusV
Hallo Stefan,
Ich bin auch kein Fachmann. Aber ich frage mich ob du vielleicht den Bereich der intelligenten Tabelle verändert hast. Wenn dem so wäre, dann kann es sein dass nach Zeile 1 Schluss ist mit der Übertragung, weil dort auch die intelligente Tabelle endet. Das kannst du im Namensmanager prüfen.
Ist nur so ein Gedanke weil mir das neulich auch passiert ist.
Gruss,
FranciskusV
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige