Instrução ReDim

Usada no nível de procedimento para realocar o espaço de armazenamento das variáveis de matrizes dinâmicas.

Sintaxe

ReDim [ Preserve ] nomedavariável ( subscritos ) [ Astipo ], [ nomedavariável ( subscritos ) [ Astipo ]] . . .

A sintaxe da instrução ReDim contém estas partes:

Parte Descrição
Preserve Opcional. Palavra-chave usada para preservar os dados de uma matriz existente depois que você altera o tamanho da última dimensão.
nomedavariável Obrigatório. Nome da variável; segue as convenções de nomenclatura padrão para variáveis.
subscritos Obrigatório. Dimensões de uma variável de matriz; é possível declarar até 60 dimensões múltiplas. O argumentosubscripts usa a seguinte sintaxe:

[lowerTo] superior [ , [inferiora] superior ] . . .

Quando não for explicitamente indicado em inferior, o limite inferior de uma matriz será controlado pela instrução Option Base. O limite inferior será zero se nenhuma instrução Option Base estiver presente.
tipo Opcional. Tipo de dados da variável; pode ser Byte, Boolean, Integer, Long, Conversor de Moedas, Single, Double, Decimal (não suportado atualmente), Date, String (para cadeias de caracteres de comprimento variável), comprimentoda cadeia de caracteres (para cadeias de caracteres de comprimento fixo), Objeto, Variant, um tipo definido pelo usuário ou um tipo de objeto.

Use uma cláusula Astipo para todas as variáveis que estão sendo definidas. Para uma Variant que apresenta uma matriz, o tipo descreve o tipo de cada elemento da matriz, mas não altera a Variant para outros tipos.

Comentários

A declaração ReDim é usada para dimensionar ou redimensionar uma matriz dinâmica que já foi declarada por usar uma instrução Private, Public ou Dim com parênteses vazios (sem subscritos de dimensão).

Use a instrução ReDim repetidamente para alterar o número de elementos e dimensões em uma matriz. No entanto, você não pode declarar uma matriz de um tipo de dados e usar o ReDim para alterar essa matriz para outro tipo de dados, a menos que a matriz esteja contida em uma Variant. Se a matriz estiver contida em uma Variant, o tipo dos elementos pode ser alterado usando uma cláusula Astipo, a menos que você esteja usando a palavra-chave Preserve. Nesse caso, nenhuma alteração aos tipos de dados é permitida.

Se você usar a palavra-chave Preserve, será possível redimensionar apenas a última dimensão da matriz e não será possível alterar o número de dimensões. Por exemplo, se a matriz tem apenas uma dimensão, você pode redimensionar essa dimensão porque ela é a única restante. No entanto, se a matriz apresenta duas ou mais dimensões, só será possível alterar o tamanho da última dimensão e preservar o conteúdo da matriz.

O exemplo a seguir mostra como você pode aumentar o tamanho da última dimensão de uma matriz dinâmica sem apagar os dados existentes dela.

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

Da mesma forma, ao usar Preserve, é possível alterar o tamanho da matriz apenas alterando o limite superior; a alteração do limite inferior causa um erro.

Se você criar uma matriz menor do que antes, os dados dos elementos eliminados serão perdidos.

Quando as variáveis são inicializadas, uma variável numérica é inicializada como 0, uma cadeia de caracteres de comprimento variável é inicializada para uma cadeia caracteres de comprimento zero ("") e uma cadeia de caracteres de comprimento fixo é preenchida com zeros. As variáveis Variant são inicializadas para Empty. Todo elemento de uma variável de tipo definido pelo usuário é inicializado como se fosse uma variável separada.

Antes de ser usada, a variável que se refere a um objeto deve ser atribuída ao objeto existente por meio da instrução Set. Até que seja atribuída a um objeto, a variável de objeto declarada tem o valor especial Nothing, que indica que não se refere a qualquer instância específica de um objeto.

A instrução ReDim atua como uma instrução declarativa quando a variável que ela declara não existe no nível de módulo nem no nível de procedimento. Se outra variável com o mesmo nome for criada posteriormente, mesmo em um escopo maior, ReDim se referirá à última variável e não necessariamente causará um erro de compilação, mesmo que Option Explicit esteja em vigor. Para evitar esses conflitos, ReDim não deve ser usada como uma instrução declarativa e sim para redimensionar matrizes.

Observação

Para redimensionar uma matriz contida em uma Variant, é necessário declarar explicitamente a variável Variant antes de tentar redimensionar sua matriz.

Exemplo

Este exemplo usa a instrução ReDim para alocar e realocar espaço de armazenamento para as variáveis de matrizes dinâmicas. Ele pressupõe que Option Base seja 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 

A próxima instrução redimensiona a matriz e apaga os elementos.

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

A instrução a seguir redimensiona a matriz, mas não apaga elementos.

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

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.