2010-03-08 12 views
7

Tengo un código que parece no hacer lo que se espera que haga. Las matrices de VBA son mutables por todos los medios, pero parece que cuando se almacenan en un diccionario como valores de algunas claves, ya no se pueden modificar. ¿Algunas ideas?Cambiar valores de matriz en un diccionario de VBA

Sub foo() 
    Dim mydict As New Dictionary 
    mydict.Add "A", Array(1, 2, 3) 
    MsgBox mydict("A")(1) 
    ''# The above shows 2, which is fine 
    mydict("A")(1) = 34 
    MsgBox mydict("A")(1) 
    ''# The above also shows 2, which is not fine 
End Sub 
+0

El problema es que cuando obtiene la matriz del diccionario con mydict ("A"), obtiene una copia y no una referencia. Ver: http://stackoverflow.com/questions/1402876/vba-populating-collection-with-arrays/1402986#1402986 – jtolle

Respuesta

9

Parece que todavía necesitará configurar otra var para actualizar el valor de la matriz.

mArray = mydict.Item(1) 
mArray(1) = 34 
mydict.Item(1) = mArray 
+0

¡funciona muy bien para mí! – Gordon

0

Hubiera escrito esta respuesta como un comentario a la respuesta del Sr. Irizarry, pero no estoy autorizado. De todos modos ... Traté de escribir la última línea de código (a continuación) para asignar la matriz al primer elemento del diccionario, pero no funcionó. La matriz en ese elemento se mantuvo como estaba antes.

mydict.items(1) = mArray 

Según lo que he leído en otras partes, parece tener que ver con la instancia del diccionario que está llamando. Lo cambié a la siguiente línea y funcionó.

mydict(mydict.keys(1)) = mArray 

Todavía no estoy seguro de por qué es así, pero ahí está.

Cuestiones relacionadas