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.