Instrucción ReDim

Se usa a nivel de procedimiento para reasignar el espacio de almacenamiento para variables de matriz dinámica.

Sintaxis

ReDim [ Preserve ] varname ( subscripts ) [ Astype ] [ , varname ( subscripts ) [ Astype ]] . . .

La sintaxis de la instrucción ReDim consta de estas partes:

Parte Descripción
Preserve Opcional. Palabra clave usada para conservar los datos en una matriz existente al cambiar el tamaño de la última dimensión.
varname Obligatorio. Nombre de la variable; sigue las convenciones de nomenclatura de variable estándar.
subscripts Obligatorio. Dimensiones de una variable de matriz; se pueden declarar hasta 60 dimensiones distintas. El argumentosubíndices usa la sintaxis siguiente:

[inferiora] upper [ , [lowerTo] upper ] . . .

Cuando no se encuentra de manera explícita en lower, el límite inferior de una matriz se controla mediante la instrucción Option Base. El límite inferior es cero si no existe una instrucción Option Base.
type Opcional. Tipo de datos de la variable; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no compatible actualmente), Date, String (para cadenas de longitud variable), Longitud de cadena (para cadenas de longitud fija), Object, Variant, un tipo definido por el usuario o un tipo de objeto.

Utilizar una cláusula Astype independiente para cada variable que se define. Para una Variant que contiene una matriz, type describe el tipo de cada elemento de la matriz, pero no cambia la Variant a otro tipo.

Observaciones

La instrucción ReDimse usa para aplicar o cambiar el tamaño de una matriz dinámica que ya se ha declarado formalmente mediante una instrucción Private, Public o Dim con paréntesis vacíos (sin subíndices de dimensión).

Use la instrucción ReDim repetidamente para cambiar el número de elementos y dimensiones de una matriz. Sin embargo, no puede declarar una matriz de un tipo de datos y, más adelante, usar ReDim para cambiar la matriz a otro tipo de datos, a menos que la matriz está incluida en una Variant. Si la matriz está incluida en una Variant, puede cambiar el tipo de elementos con una cláusula Astype, a menos que esté utilizando la palabra clave Preserve, en cuyo caso no se permiten cambios del tipo de datos.

Si usa la palabra clave Preserve, solo puede cambiar el tamaño de la última dimensión de la matriz, pero nunca el número de dimensiones. Por ejemplo, si la matriz tiene solo una dimensión, puede cambiar el tamaño de esta porque es la última y la única dimensión. Sin embargo, si la matriz tiene dos o más dimensiones, solo puede cambiar el tamaño de la última dimensión y conservar el contenido de la matriz.

El siguiente ejemplo muestra cómo puede aumentar el tamaño de la última dimensión de una matriz dinámica sin borrar los datos existentes de la matriz.

ReDim X(10, 10, 10) 
. . . 
ReDim Preserve X(10, 10, 15) 

De manera similar, cuando se usa Preserve, se puede cambiar el tamaño de la matriz cambiando solamente el límite superior; si se cambia el límite inferior se produce un error.

Si se reduce el tamaño de una matriz, se perderán datos en los elementos eliminados.

Cuando las variables se inicializan, se inicializa una variable numérica en 0, una cadena de longitud variable se inicializa en una cadena de longitud cero ("") y una cadena de longitud fija se completa con ceros. Las variables Variant se inicializan enEmpty. Cada elemento de una variable de tipo definido por el usuario se inicializa como si fuera una variable independiente.

La variable que hace referencia a un objeto debe tener asignado un objeto existente mediante la instrucción Set antes de poder usarlo. Hasta que se le asigne un objeto, la variable de objeto declarada tiene el valor especial Nothing, que indica que no hace referencia a ninguna instancia determinada de un objeto.

La instrucción ReDim actúa como una instrucción declarativa si la variable que declara no existe en el nivel de módulo o en el nivel de procedimiento. Si más adelante se creara otra variable con el mismo nombre, incluso en un ámbito mayor, ReDim hará referencia a la última variable y no provocará necesariamente un error de compilación, incluso si Option Explicit está en vigor. Para evitar este tipo de conflictos, ReDim no debería usarse como una instrucción declarativa, sino para cambiar el tamaño de las matrices.

Nota:

Para cambiar el tamaño de una matriz incluida en una Variant, se debe declarar explícitamente la variable Variant antes de intentar cambiar el tamaño de su matriz.

Ejemplo

En este ejemplo, se usa la instrucción ReDim para asignar y reasignar espacio de almacenamiento para variables de matriz dinámica. Se supone que la Option Base es 1.

Dim MyArray() As Integer ' Declare dynamic array. 
Redim MyArray(5) ' Allocate 5 elements. 
For I = 1 To 5 ' Loop 5 times. 
 MyArray(I) = I ' Initialize array. 
Next I 

La siguiente instrucción cambia el tamaño de la matriz y borra los elementos.

Redim MyArray(10) ' Resize to 10 elements. 
For I = 1 To 10 ' Loop 10 times. 
 MyArray(I) = I ' Initialize array. 
Next I 

La siguiente instrucción cambia el tamaño de la matriz, pero no borra elementos.

Redim Preserve MyArray(15) ' Resize to 15 elements. 

Vea también

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.