Durchlaufen eines Scripting.Dictionary mit Index- / Artikelnummer
Ähnlich zudieses Problembei Verwendung von aScripting.Dictionary
Objekt in VBA ist das Ergebnis des folgenden Codes unerwartet.
Option Explicit
Sub test()
Dim d As Variant
Dim i As Integer
Dim s As String
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "a"
Debug.Print d.Count ' Prints '1' as expected
For i = 1 To d.Count
s = d.Item(i)
Debug.Print s ' Prints ' ' (null) instead of 'a'
Next i
Debug.Print d.Count ' Prints '2' instead of '1'
End Sub
Mit einem auf Null basierenden Index wird dasselbe Ergebnis erzielt:
For i = 0 To d.Count - 1
s = d.Item(i)
Debug.Print s
Next i
Wenn ich mir das Objekt ansehe, kann ich tatsächlich erkennen, dass es zwei Elemente enthält. Der Schlüssel für das neu hinzugefügte ist1
, wie von hinzugefügti
. Wenn ich diese Schleife auf eine höhere Zahl erhöhe, wird die Anzahl der Elemente im Wörterbuch für jede Schleife einmal erhöht.
Ich habe dies in Office / VBA 2003, 2010 und 2013 getestet. Alle weisen dasselbe Verhalten auf, und ich erwarte, dass auch andere Versionen (2007) dies tun.
Ich kann das mit anderen Schleifenmethoden umgehen, aber das hat mich überrascht, als ich versuchte, Objekte zu speichern und eine zu bekommenObjekt erwarteter Fehler auf ders = d.Item(i)
Linie.
Ich verstehe, dass ich so etwas machen kann:
For Each v In d.Keys
Set o = d.item(v)
Next v
Aber ich bin eher neugierig, warum ich die Artikel nicht nach Nummern durchlaufen kann.