Instrucción ReDim (Visual Basic)

Reasigna espacio de almacenamiento a una variable de matriz.

Sintaxis

ReDim [ Preserve ] name(boundlist) [ ,  name(boundlist) [, ... ] ]  

Partes

Término Definición
Preserve Opcional. Modificador usado para mantener los datos en la matriz existente cuando cambia el tamaño solamente de la última dimensión.
name Necesario. Nombre de la variable de matriz. Vea Declared Element Names.
boundlist Necesario. Lista de límites de cada dimensión de la matriz redefinida.

Comentarios

Puede utilizar la instrucción ReDim para cambiar el tamaño de una o más dimensiones de una matriz que ya se ha declarado. Si tiene una matriz grande y ya no necesita algunos de sus elementos, ReDim puede liberar memoria al reducir el tamaño de la matriz. Por otro lado, si la matriz necesita más elementos, ReDim puede agregarlos.

La instrucción ReDim está destinada solo a las matrices. No es válida en escalares (variables que contienen un único valor), colecciones ni estructuras. Tenga en cuenta que, si declara una variable de tipo Array, la instrucción ReDim no tiene suficiente información de tipo para crear la nueva matriz.

Solo puede usar ReDim en el nivel de procedimiento. Por lo tanto, el contexto de declaración de la variable debe ser un procedimiento; no puede ser un archivo de código fuente, un espacio de nombres, una interfaz, una clase, una estructura, un módulo o un bloque. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).

Reglas

  • Varias variables. Puede cambiar el tamaño de varias variables de matriz en la misma instrucción de declaración, y especificar las partes name y boundlist para cada variable. Las variables se separan con comas.

  • Límites de matrices. Cada entrada de boundlist puede especificar los límites inferior y superior de esa dimensión. El límite inferior es siempre 0 (cero). El límite superior es el valor de índice posible más alto para esa dimensión, no la longitud de la dimensión (que es el límite superior más uno). El índice de cada dimensión puede variar entre 0 y el valor del límite superior.

    El número de dimensiones de boundlist debe coincidir con el número de dimensiones (rango) de la matriz original.

  • Tipos de datos. La instrucción ReDim no puede cambiar el tipo de datos de una variable de matriz o de sus elementos.

  • Inicialización. La instrucción ReDim no puede proporcionar nuevos valores de inicialización para los elementos de la matriz.

  • Rango. La instrucción ReDim no puede cambiar el rango (el número de dimensiones) de la matriz.

  • Cambiar el tamaño con Preserve. Si usa Preserve, puede cambiar el tamaño únicamente de la última dimensión de la matriz. Para cualquier otra dimensión, debe especificar el límite de la matriz existente.

    Por ejemplo, si su matriz tiene solo una dimensión, puede cambiar el tamaño de esa dimensión y conservar todo el contenido de la matriz, ya que es la última y única dimensión. Sin embargo, si su matriz tiene dos o más dimensiones, puede cambiar solamente el tamaño de la última dimensión si utiliza Preserve.

  • Propiedades. Puede usar ReDim en una propiedad que contiene una matriz de valores.

Comportamiento

  • Reemplazo de matriz. ReDim libera la matriz existente y crea una matriz con el mismo rango. La nueva matriz reemplaza la matriz liberada en la variable de matriz.

  • Inicialización sin Preserve. Si no se especifica Preserve, ReDim inicializa los elementos de la nueva matriz mediante el valor predeterminado para su tipo de datos.

  • Inicialización con Preserve. Si se especifica Preserve, Visual Basic copia los elementos de la matriz existente en la nueva.

Ejemplo

El ejemplo siguiente aumenta el tamaño de la última dimensión de una matriz dinámica sin perder los datos existentes en la matriz y, a continuación, reduce el tamaño con pérdida de datos parcial. Por último, reduce el tamaño a su valor original y reinicializa todos los elementos de la matriz.

Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)

La instrucción Dim crea una nueva matriz con tres dimensiones. Cada dimensión se declara con un límite de 10, por lo que el índice de matriz para cada dimensión puede oscilar entre 0 y 10. En el siguiente análisis, las tres dimensiones se conocen como capa, fila y columna.

El primer ReDim crea una nueva matriz que reemplaza la matriz existente en la variable intArray. ReDim copia todos los elementos de la matriz existente en la nueva matriz. También agrega 10 columnas más al final de cada fila en cada capa e inicializa los elementos de estas nuevas columnas a 0 (el valor predeterminado de Integer, que es el tipo de elemento de la matriz).

El segundo ReDim crea otra nueva matriz y copia todos los elementos que quepan. Sin embargo, se pierden cinco columnas del final de cada fila en cada capa. No es un problema si ya ha terminado de utilizar estas columnas. Reducir el tamaño de una matriz grande puede liberar memoria que ya no necesite.

El tercer ReDim crea otra nueva matriz y quita otras cinco columnas del final de cada fila en cada capa. Esta vez no copia los elementos existentes. Esta instrucción revierte la matriz a su tamaño original. Dado que la instrucción no incluye el modificador Preserve, establece todos los elementos de matriz con sus valores predeterminados originales.

Para obtener más ejemplos, vea Matrices.

Consulte también