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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage