Anzeige
Archiv - Navigation
1556to1560
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

Fehler im Umgang mit Dictionary

Fehler im Umgang mit Dictionary
11.05.2017 11:16:50
Marc
Hi,
ich hab einen Knoten im Kopf den ich nicht alleine aufgelöst bekomme.
Ich iteriere über ein Dictionary welches ein weiteres Dictionary inne hat.
Die (geschachtelte) Schleife funktioniert soweit auch ganz gut, aber in der inneren bleibe ich immer beim 1. Kindseintrag hängen.
sht.Cells(2, Spalte).Value = ParentKeys(i) & "/" & ChildKeys(j) & " - " & Child(ChildKeys(j))
Mit dem Ausdruck Child(ChildKeys(j)) referenziere ich immer das zuletzt befüllte Child-Objekt. Tatsächlich möchte ich ja aber bei jedem Schleifendurchlauf das Child-Objekt zum aktuellen Parent haben (und eben nicht das zuletzt befüllte).
Hier mal meine Schleife(n):

ParentKeys = Parent.Keys
For i = UBound(ParentKeys) To LBound(ParentKeys) Step -1
ChildKeys = Parent(ParentKeys(i)).Keys
For j = LBound(ChildKeys) To UBound(ChildKeys) Step 1
sht.Cells(2, Spalte).Value = ParentKeys(i) & "/" & ChildKeys(j) & " - " & Child(ChildKeys( _
j))
Next j
Next i
Die Befüllung von Parent und Child ist korrekt - soweit habe ich das schon nachvollzogen.
Was ist also nötig um mit Child(ChildKeys(j)) nicht immer auf das gleiche Child zu greifen, sondern abhängig vom aktuellen Parent?
ChildKeys(j) liefert mir noch den richtigen Key zum aktuellen Parent. Jetzt brauch ich nur noch den richtigen Value zu genau diesem Key...also irgenwie muss ich das Child aus dem letzten Ausdruck anpassen/ersetzten.
Versuche wie ChildKeys(ChildKeys(j)), ParentKeys(ChildKeys(j)) oder ParentKeys(i)(ChildKeys(j)) waren dabei nicht sonderlich erfolgreich.
Puhh, keine Ahnung...komm hier nicht weiter :(
Danke im Voraus!

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler im Umgang mit Dictionary
11.05.2017 12:35:36
Rudi
Hallo,
sollen wir das nachbauen?
Wenn ich mich recht erinnere, ist dir schon vor Wochen gesagt worden, dass du Parent und Child nicht als Variablennamen verwenden sollst, da in VBA enthalten.
Gruß
Rudi
AW: Fehler im Umgang mit Dictionary
11.05.2017 13:36:50
Marc
Hi,
an den Namen liegt es per se mal nicht. Habe das auch mal mit Par und Chi versucht - Ergebnis unverändert. Verstehe deinen Punkt, aber solange es grundsätzlich nicht läuft will ich erst mal das Problem in den Griff bekommen (was ja nix mit dem Namen zu tun hat).
Zum Thema "Nachbauen": Ich habe versucht das Problem so genau wie möglich mit so wenig Code wie nötig zu beschreiben. Natürlich könnte ich auch die anderen 500 Zeilen Code noch dazu packen, aber am Ende hätte ich angenommen sind diese irrelevant für das Lösen des Problems.
Was jetzt genau in Par und Chi drin steht und wie ich das befüllt habe ist ja zweitrangig bei der Frage wie ich auf das richtige Chi-Element zugreifen kann beim drüber iterieren. Das konkrete Problem liegt bei der Art wie ich versuche auf den Value des Chi-Objekts zuzugreifen, was offensichtlich falsch ist.
Wenn es der Lösung meines Problems aber hilft will ich euch gern eine entsprechende Beispiel Prozedur zur Verfügung stellen:

Sub test()
Dim Par As Object, Chi As Object
Dim zahl As Single
Set Par = CreateObject("Scripting.Dictionary")
For k = 1 To 2 Step 1
Debug.Print "Chi-Elemte für Parent " & k
For l = 1 To 2 Step 1
Set Chi = CreateObject("Scripting.Dictionary")
zahl = l * Rnd()
Chi(l) = zahl
Debug.Print zahl
Next l
Par.Add k, Chi
Next k
Debug.Print ""
Debug.Print "Schleife über Par und deren Chi"
For Each i In Par.Keys
'ChildKeys = Par(i).Keys
For Each j In Par(i).Keys
Debug.Print i & "/" & j & " - tbd " ' & Chi(ChildKeys(j))
Next j
Next i
End Sub
Habs jetzt mal mit for each versucht - Ergebnis wird nicht besser.
Die Ausgabe dazu sieht so aus:
Chi-Elemte für Parent 1
0,7055475
1,066848
Chi-Elemte für Parent 2
0,5795186
0,5791249
Schleife über Par und deren Chi
1/2 - tbd
2/2 - tbd 
Bis zum Value von Chi komm ich noch gar nicht weil mir aufgefallen ist, dass ich ja auch nur 1x die innere Schleife durchlaufe - obwohl ich 2 Einträge drin habe :(
Anzeige
AW: Fehler im Umgang mit Dictionary
11.05.2017 13:54:15
Daniel
Hi
der Hauptfehler steckt schon in der Befüllungschleife:
das Set Chi = CreateObjet("Scripting.Dictionary") muss vor das For.

For k = 1 To 2 Step 1
Debug.Print "Chi-Elemte für Parent " & k
Set Chi = CreateObject("Scripting.Dictionary")
For l = 1 To 2 Step 1
zahl = l * Rnd()
Chi(l) = zahl
Debug.Print zahl
Next l
Par.Add k, Chi
Next k

Die Ausgabe geht dann auf mehrere Arten.
mit einer Zwischenvariable für Child:
    For Each i In Par.keys
Set Chi = Par(i)
For Each j In Chi.keys
Debug.Print i & "/" & j & " - " & Chi(j)
Next j
Next i
Es geht aber auch direkt:
    For Each i In Par.keys
For Each j In Par(i).keys
Debug.Print i & "/" & j & " - " & Par(i)(j)
Next j
Next i
Gruß Daniel
Anzeige
AW: Fehler im Umgang mit Dictionary
11.05.2017 14:07:29
Marc
Danke Daniel...ein Quantensprung für mich!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige