Questo tutorial dimostrerà come utilizzare gli array dinamici (redim e redim preservare) in VBA.
Array dinamico
Array dinamici sono array che possono cambiare dimensione (al contrario di array statici, che sono statici).
Per dichiarare un array dinamico, dichiari l'array, ma ometti la dimensione dell'array:
1 | Dim strNames() As String |
Quindi, prima di poter assegnare valori all'array, è necessario utilizzare l'istruzione ReDim per impostare l'array alla dimensione desiderata:
1 | ReDim strNames (da 1 a 3) |
Ora, ogni volta che vuoi modificare la dimensione dell'array, usa semplicemente ReDim (o ReDim Preserve come impareremo di seguito).
Array di varianti dinamiche
Nota: gli array varianti sono leggermente diversi. Con gli array varianti, non è necessario impostare la dimensione dell'array con ReDim prima di assegnare i valori.
12345678 | Sub TestArray()'dichiarare la variabileDim varNames() come variante'popola l'arrayvarNames() = Array("Fred", "Wilma", "Barney", "Betty")'restituire i valoriMsgBox Join(varNames, ",")Fine sottotitolo |
Redim contro Redim Preserve
Il ReDim l'istruzione ridimensiona un array, radura tutti i valori esistenti.
Il ReDim Preserve l'istruzione ridimensiona un array, mantenendo ("preservare") tutti i valori esistenti.
Usando ReDim
In pratica, il ridimensionamento di un array con ReDim si presenta così:
123456789101112 | Sub TestReDim()'dichiarare l'array di stringheDim strNames() As String'ridimensiona l'array di stringhe per poter contenere 3 valoriReDim strNames (da 1 a 3)'popola l'array con 3 nomistrNames(1) = "Mel"strNames(2) = "Steve"strNames(3) = "Bob"'mostra il risultato nella finestra immediataDebug.Print Join(strNames, vbCrLf)Fine sottotitolo |
Utilizzo di ReDim Preserve
In questo esempio, useremo ReDim per impostare l'array dinamico iniziale e poi ReDim Preserve per ridimensionare l'array, mantenendo i valori originali:
1234567891011121314151617 | Sub TestReDim()'dichiarare l'array di stringheDim strNames() As String'ridimensiona l'array di stringhe per poter contenere 3 valoriReDim strNames (da 1 a 3)'popola l'arraystrNames(1) = "Mel"strNames(2) = "Steve"strNames(3) = "Bob"'mostra il risultato nella finestra immediataDebug.Print Join(strNames, vbCrLf)'redim ma preserva i datiReDim Preserve strNames (da 1 a 4)strNames(4) = "Fred"'mostra il risultato nella finestra immediataDebug.Print Join(strNames, vbCrLf)Fine sottotitolo |
Se non usi il CONSERVA istruzione, si perderebbero i dati che erano stati precedentemente nell'array.
Nella finestra immediatamente sopra, l'array ha popolato Mel, Steve e Bob. Quando è stato nuovamente dichiarato, ha rimosso quei valori e ha restituito 3 valori vuoti e quindi il valore "Fred". Ciò è dovuto al CONSERVA dichiarazione omessa.