Verständnisfrage zu einer Collection
Hallo zusammen, ich hoffe ihr könnt mir mal wieder etwas helfen.
Kann ich eine Collection verschachtelt durchlaufen, bzw. aufrufen? oder würde aufgrund des ersten Next irgendwas durcheinander kommen? Ich versuche mal zu schreiben was ich meine:
For each oDetail in oArtikelDetail
if Treffer then
For each oDetail in oArtikel
such irgendwas
next oDetail
next oDetail
Kann ich eine Collection verschachtelt durchlaufen, bzw. aufrufen? oder würde aufgrund des ersten Next irgendwas durcheinander kommen? Ich versuche mal zu schreiben was ich meine:
For each oDetail in oArtikelDetail
if Treffer then
For each oDetail in oArtikel
such irgendwas
next oDetail
next oDetail
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 378178
Url: https://administrator.de/forum/verstaendnisfrage-zu-einer-collection-378178.html
Ausgedruckt am: 07.04.2025 um 22:04 Uhr
6 Kommentare
Neuester Kommentar
Hi,
theoretisch geht das. Aber sowas würde ich mir gar nicht erst angewöhnen. In jedem Fall wäre nach der inneren Schleife die Referenz auf das Objekt der äußeren Schleife weg. Du könntest also in der äußeren Schleife nicht mehr mit dieser Variable oDetail arbeiten, es sei denn, es ist gewünscht hier mit dem letzten geladenen Wert/Referenz der inneren Schleife zu arbeiten. So oder so: Das ist Murks. Nimm für die 2. Schleife eine eigene Laufvariable und gut ist.
E.
theoretisch geht das. Aber sowas würde ich mir gar nicht erst angewöhnen. In jedem Fall wäre nach der inneren Schleife die Referenz auf das Objekt der äußeren Schleife weg. Du könntest also in der äußeren Schleife nicht mehr mit dieser Variable oDetail arbeiten, es sei denn, es ist gewünscht hier mit dem letzten geladenen Wert/Referenz der inneren Schleife zu arbeiten. So oder so: Das ist Murks. Nimm für die 2. Schleife eine eigene Laufvariable und gut ist.
E.
Sehr verwirrend. Fangen wir hinten an.
rufst Du doch schon Element für Element der Collection auf.
Mir ist im Grunde nicht ganz klar, wie ich die einzelnen Items abgreifen kann die in dieser Collection liegen.
Das hast Du doch schon herausgefunden. Mit demFor each oDetail in oArtikelDetail
und würde jetzt gerne bei der Anlage des Tabellenblattes in ein Sub "fülle Daten" springen
Dein eingangs genannter Code nutzt aber keine Sub. Da hast Du nur 2 verschachtelte For-Next-Schleifen. Mit Sub geht das in etwa soSub Aussen
For each oDetail in oArtikelDetail
Call Sub Innen(oDetail.strArtikelnummer, oDetail.bAktiv)
Next
End Sub
Sub Innen(Parameter1, Parameter2)
'Tue etwas mit den übergebenen Parametern
'Parameter1 in diesem Bsp. jetzt oDetail.strArtikelnummer
'Parameter2 in diesem Bsp. jetzt oDetail.bAktiv
.....
End Sub
Ich denke schon dass ich Dich verstehe, nur schreibst/fragst Du jedes Mal auch irgendwie irgendwas anderes.
Du redest immer von "Datensatz". Wohjer komnmt denn dieser? Aus einer SQL- oder Access-DB oder woher? Falls eine DB, dann filtert man am einfachsten schon bei der Abfrage der DB. Also in der Select-Anweisung.
Warum fragst Du also noch danach?
Du redest immer von "Datensatz". Wohjer komnmt denn dieser? Aus einer SQL- oder Access-DB oder woher? Falls eine DB, dann filtert man am einfachsten schon bei der Abfrage der DB. Also in der Select-Anweisung.
Ich habe doch jeweils einen Datensatz in dem oDetail.A bis oDetail.Z enthalten sind?
Du hast offenbar "eine Collection von Datensätzen". Ein Datesatz hat i.A. Spalten (Felder).Genau diesen einen Datensatz möchte ich abgreifen wenn eine Bedingung erfüllt ist, zb oDetail.Z = "test"
Ohne zu wissen, was das für "Datensätze" sind, kann man dazu nichts sagen. LINQ kenn VBA nicht. Wenn die Daten schon im VBA als Objekte vorliegen, welche Elemete einer Collection sind, dann kannst Du in VBA nur diese Elemente der Reihe nach durchlaufen und mit IF die einzelnen Eigenschaften der Objekte vergleichen. Und bei Treffer mit diesem Objekt etwas machen. Aber dieses Prinzip hattest Du doch schon erkannt ...Sub Main
For each oDetail in oArtikelDetail
Treffer = (oDetail.Z = "test")
if Treffer then
call DetailBehandlung(oDetail)
End if
next oDetail
End Sub
Sub DetailBehandlung(oDetailSub)
msgbox oDetailSub.Z
End Sub