Este tutorial demostrará cómo usar matrices dinámicas (redim y redim preserve) en VBA.
Matriz dinámica
Matrices dinámicas son matrices que pueden cambiar de tamaño (a diferencia de matrices estáticas, que son estáticos).
Para declarar una matriz dinámica, declara la matriz, pero omite el tamaño de la matriz:
1 | Dim strNames () como cadena |
Luego, antes de que pueda asignar valores a su matriz, debe usar la Declaración ReDim para configurar la matriz al tamaño deseado:
1 | ReDim strNames (1 a 3) |
Ahora, en cualquier momento que desee cambiar el tamaño de su matriz, simplemente use ReDim (o ReDim Preserve, como veremos a continuación).
Matrices de variantes dinámicas
Nota: Las matrices variantes son un poco diferentes. Con las matrices variantes, no es necesario establecer el tamaño de la matriz con ReDim antes de asignar valores.
12345678 | Sub TestArray ()'declarar la variableDim varNames () como variante'poblar la matrizvarNames () = Array ("Fred", "Wilma", "Barney", "Betty")'devuelve los valoresMsgBox Join (varNames, ",")End Sub |
Redim contra Redim Preserve
los ReDim declaración cambia el tamaño de una matriz, claro todos los valores existentes.
los ReDim Preserve declaración cambia el tamaño de una matriz, acuerdo (“Preservando”) todos los valores existentes.
Usando ReDim
En la práctica, cambiar el tamaño de una matriz con ReDim se ve así:
123456789101112 | Sub TestReDim ()'declarar la matriz de cadenasDim strNames () como cadena'cambiar el tamaño de la matriz de cadenas para poder contener 3 valoresReDim strNames (1 a 3)'rellenar la matriz con 3 nombresstrNames (1) = "Mel"strNames (2) = "Steve"strNames (3) = "Bob"'muestra el resultado en la ventana inmediataDebug.Print Join (strNames, vbCrLf)End Sub |
Uso de ReDim Preserve
En este ejemplo, usaremos ReDim para establecer la matriz dinámica inicial y luego ReDim Preserve para cambiar el tamaño de la matriz, acuerdo los valores originales:
1234567891011121314151617 | Sub TestReDim ()'declarar la matriz de cadenasDim strNames () como cadena'cambiar el tamaño de la matriz de cadenas para poder contener 3 valoresReDim strNames (1 a 3)'poblar la matrizstrNames (1) = "Mel"strNames (2) = "Steve"strNames (3) = "Bob"'muestra el resultado en la ventana inmediataDebug.Print Join (strNames, vbCrLf)'redim pero conserva los datosReDim Preserve strNames (1 a 4)strNames (4) = "Fred"'muestra el resultado en la ventana inmediataDebug.Print Join (strNames, vbCrLf)End Sub |
Si no usa el PRESERVAR declaración, perdería los datos que habían estado en la matriz anteriormente.
En la ventana inmediata de arriba, la matriz llenó a Mel, Steve y Bob. Cuando se volvió a declarar, eliminó esos valores y en su lugar devolvió 3 valores en blanco y luego el valor "Fred". Esto se debe a la PRESERVAR declaración omitida.