ReDim (Instrucción)

Visual Basic VBLR

ReDim (Instrucción)

       

Se utiliza en el nivel de procedimiento para reasignar espacio de almacenamiento para variables de matriz dinámica.

Sintaxis

ReDim [Preserve] nombre_variable(subíndices) [As tipo] [, nombre_variable(subíndices) [As tipo]] . . .

La sintaxis de la instrucción ReDim consta de las siguientes partes:

Parte Descripción
Preserve Opcional. Palabra clave utilizada para conservar los datos de una matriz existente cuando se cambia el tamaño de la última dimensión.
nombre_
variable
Requerido. Nombre de la variable; sigue las convenciones estándar de nombre de variable.
subíndices Requerido. Dimensiones de una variable de matriz; se pueden declarar hasta 60 dimensiones múltiples. El argumento subíndices utiliza la sintaxis siguiente:

[inferior To] superior [,[inferior To] superior] . . .

Cuando no se declara explícitamente en inferior, el límite inferior de una matriz se controla mediante la instrucción Option Base. El límite inferior es cero si no hay ninguna instrucción Option Base.

tipo Opcional. Tipo de datos de la variable; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no admitida actualmente), Date, String (para cadenas de longitud variable), String * length (para cadenas de longitud fija), Object, Variant, un tipo definido por el usuario, o un tipo de objeto. Utilice una cláusula As tipo distinta para cada variable que defina. Para una Variant que contiene una matriz, tipo describe el tipo de cada elemento de la matriz, pero no cambia la Variant a algún otro tipo.

Comentarios

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

Puede utilizar 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 luego usar ReDim para cambiar la matriz a otro tipo de datos, a menos que la matriz esté contenida en una Variant. Si la matriz está contenida en una Variant, el tipo de los elementos se puede cambiar mediante una cláusula As tipo, a menos que esté utilizando la palabra clave Preserve, en cuyo caso no se permiten cambios al tipo de datos.

Si utiliza la palabra clave Preserve sólo puede cambiar el tamaño de la última dimensión de la matriz y no es posible cambiar el número de dimensiones. Por ejemplo, si la matriz sólo tiene una dimensión, puede cambiar el tamaño de esa dimensión porque es la última y única dimensión. Sin embargo, si la matriz tiene dos o más dimensiones, sólo puede cambiar la dimensión de la última y todavía conservar el contenido de la matriz. El ejemplo siguiente muestra cómo puede aumentar el tamaño de la última dimensión de una matriz dinámica sin borrar ninguno de los datos existentes contenidos en la matriz.

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

De modo parecido, cuando utiliza el argumento Preserve puede cambiar el tamaño de la matriz sólo cambiando el límite superior; cambiar el límite inferior produce un error.

Si hace que una matriz sea más pequeña de lo que era, perderá los datos de los elementos eliminados. Si transfiere una matriz a un procedimiento por referencia, no puede cambiar el tamaño de la matriz dentro del procedimiento.

Cuando se inicializan las variables, una variable numérica se inicializa a 0, una cadena de longitud variable se inicializa a una cadena de longitud cero ("") y una cadena de longitud fija se rellena con ceros. Las variables Variant se inicializan a Empty. Cada elemento de una variable de un tipo definido por el usuario se inicializa como si fuera una variable distinta. A una variable que se refiere a un objeto se le debe asignar un objeto existente mediante la instrucción Set antes de que se pueda usar. Hasta que se asigna a un objeto, la variable de objeto declarada tiene el valor especial Nothing, el cual indica que no se refiere a ninguna instancia en particular de un objeto.

Precaución   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 nivel de procedimiento. Si más tarde crea otra variable con el mismo nombre, incluso con un alcance mayor, ReDim hará referencia a la creada más tarde y no causará necesariamente un error de compilación, incluso aunque Option Explicit esté en efecto. Para evitar estos conflictos, ReDim no se debe utilizar como una instrucción declarativa, sino sólo para cambiar el tamaño de las matrices.

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