Recorrido a través de un Scripting.Dictionary usando índice / número de artículo

Similar aeste problema, cuando se usa unScripting.Dictionary objeto en VBA, el resultado del siguiente código es inesperado.

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

Usando un índice basado en cero, se logra el mismo resultado:

For i = 0 To d.Count - 1
    s = d.Item(i)
    Debug.Print s
Next i

Al observar el objeto, puedo ver que tiene dos elementos, la clave para el nuevo agregado es1, como agregado dei. Si incremento este bucle a un número más alto, entonces el número de elementos en el diccionario aumenta, una vez para cada bucle.

He probado esto en Office / VBA 2003, 2010 y 2013. Todos muestran el mismo comportamiento, y espero que otras versiones (2007) también lo hagan.

Puedo solucionar esto con otros métodos de bucle, pero esto me tomó desprevenido cuando estaba tratando de almacenar objetos y obtenía unaerror de objeto esperado sobre els = d.Item(i) línea.

Para que quede constancia, sé que puedo hacer cosas como esta:

For Each v In d.Keys
    Set o = d.item(v)
Next v

Pero tengo más curiosidad acerca de por qué parece que no puedo recorrer los elementos por número.

Respuestas a la pregunta(4)

Su respuesta a la pregunta