El consejo de Alex K. sobre el uso de un Dictionary
es correcto, pero creo que el problema aquí es más general de lo que permite su respuesta. Una clave Collection
(o posición de índice para ese asunto) solo sirve para leer, no para escribir.
Así pues, en esta línea:
dFeat("M1")("TOTAL") = 88 ' Error here
dFeat("M1")
está muy bien. Devuelve el Collection
que ha agregado con la clave "M1". El error está sucediendo porque intenta asignar directamente a un elemento de esa colección. En general, si c
es Collection
, c("TOTAL")
(o c(2)
) no puede ser un valor l.
Como dice Alek K., la mejor forma de evitar esto es usar Dictionary
para las "colecciones" internas, o para las partes interna y externa. Aquí es cómo utilizar uno para el interior se vería:
Dim d As Dictionary
Set d = New Dictionary
d("PASSED") = 3
d("TOTAL") = 4
dFeat.Add d, "M1"
Entonces la línea:
dFeat("M1")("TOTAL") = 88
funcionará porque dFeat("M1")("TOTAL")
es un valor-I válida.
Si por alguna razón usted no puede o no desea incluir la MS Tiempo de ejecución de secuencias de comandos, usted tiene que reemplazar la línea de falla con algo como:
Dim c As Collection
Set c = dFeat("M1")
Call c.Remove("TOTAL")
Call c.Add(88, "TOTAL")
o más concisamente:
Call dFeat("M1").Remove("TOTAL")
Call dFeat("M1").Add(88, "TOTAL")
a continuación, puede leer el valor de dFeat("M1")("TOTAL")
, pero todavía no se puede asignar a la misma.
+1 for 'Una clave de recopilación (o posición de índice para el caso) solo es buena para leer, no para escribir'. Limpiar un VBA muy oxidado para un proyecto y esta fue la clave (¡ja!) - reemplazar el ítem completo con un nuevo objeto hizo el truco. En mi caso, esto significaba una nueva matriz llena de valores de la matriz existente + cambios. Probablemente sea una forma más efectiva para objetos grandes, pero solo estoy lidiando con unas pocas docenas de matrices con 2 valores cada una. – brichins