Hmmm ... la sintassi è legale abbastanza senza avere VBA di fronte a me. Ho ragione che il tuo problema è che il tuo codice "compila" ed esegue senza generare un errore, ma che la matrice nella collezione non cambia mai? Se è così, penso che sia perché il tuo A.Item (1) potrebbe restituire una copia della matrice che hai archiviato nella collezione. Quindi accedi e modifichi l'elemento scelto bene, ma non ha l'effetto desiderato perché è l'istanza dell'array sbagliato.
In generale, le raccolte VBA funzionano meglio quando si memorizzano oggetti. Quindi funzioneranno come vuoi perché memorizzano i riferimenti. Stanno bene per la memorizzazione dei valori, ma penso che li copiano sempre, anche quelli "grandi" come le varianti di array, il che significa che non è possibile modificare il contenuto di un array memorizzato.
Considerate questa risposta solo una speculazione fino a quando qualcuno che conosce la roba di COM sottostante pesa meglio. Um ... cercapersone Joel Spolsky?
MODIFICA: dopo aver provato questo in Excel VBA, penso che ho ragione. Mettere una variante di un array in una collezione fa una copia, e così ne viene fuori una. Quindi non sembra essere un modo diretto per codificare ciò che hai effettivamente chiesto.
Sembra che ciò che realmente si desidera sia un array 3-D, ma il fatto che si stia tentando di utilizzare una raccolta per la prima dimensione implica che si desideri poter modificare la sua dimensione in quella dimensione. VBA ti permetterà solo di cambiare la dimensione dell'ultima dimensione di un array (vedi "redim preserve" nella guida). È possibile mettere gli array 2-D all'interno di un array di 1-D che è possibile modificare le dimensioni del, però:
ReDim a(5)
Dim b(2, 2)
a(2) = b
a(2)(1, 1) = 42
ReDim Preserve a(6)
Nota che una viene dichiarato con ReDim, si attenua in questo caso.
Infine, è abbastanza probabile che qualche altro approccio a qualunque cosa tu stia cercando di fare sarebbe meglio. Gli array 3D espandibili e mutevoli sono complessi e soggetti a errori, per usare un eufemismo.
Non penso che Arr2 (1, 1) = 11 cambi effettivamente la matrice nella raccolta. Vedi la mia risposta modificata, ma sembra che VBA faccia una copia dell'array quando aggiunge e legge dalla raccolta. – jtolle
Forse sono solo fuorviato dal tuo commento? Quella linea altera Arr2, ma non la matrice memorizzata nella collezione. Vedo che cambia Arr2, ma non A.Item (1), che è solo una copia di Arr2 fatta da A.Add (Arr2). – jtolle
@jtolle: mi scuso, ho appena ricontrollato e tu hai assolutamente ragione. Aggiornerò il codice sopra. È una copia di Arr2 nella collezione. –