Partilhar via


ReDim inválido

Nem todas as matrizes podem ser redimensionadas. Esse erro tem as seguintes causas e soluções:

  • Uma variável foi declarada implicitamente como Variante e tentou utilizar ReDim para alterá-la para uma matriz.

    Uma Variante pode conter uma matriz, mas se não for explicitamente declarada, não pode utilizar ReDim para torná-la numa matriz. Declare a Variante antes de utilizar ReDim para especificar o número de elementos que pode conter. Por exemplo, no código seguinte, ReDim AVar(10) causa um erro ReDim inválido, mas ReDim BVar(10) não:

AVar = 1    ' Implicit declaration of AVar. 
ReDim AVar(10)    ' Causes invalid ReDim error. 
'. 
'. 
'. 
Dim BVar    ' Explicit declaration of BVar. 
ReDim BVar(10)    ' No error. 
  • Tentou utilizar o ReDim para alterar mais do que uma dimensão de uma matriz contida numa Variante. Só pode utilizar ReDim para alterar o tamanho da última dimensão de uma matriz numa Variante. Para criar uma matriz com múltiplas dimensões que podem ser redimensionadas, a matriz não pode ser contida numa Variante e tem de a declarar da forma normal.

  • Utilize ReDim apenas para alterar o número de elementos numa matriz normal e não o tipo desses elementos. Se quiser uma matriz na qual possa alterar os tipos dos elementos, utilize uma matriz contida numa Variante. Se declarar primeiro a matriz, pode alterar os tipos e o número dos respetivos elementos da seguinte forma:

Dim MyVar As Variant    ' Declare the variable. 
ReDim MyVar(10) As String    ' ReDim it as array of String subtypes. 
ReDim MyVar(20) As Integer    ' ReDim it as array of Integer subtypes. 
ReDim MyVar(5) As Variant    ' ReDim it as array of Variant subtypes. 

  • Tentou utilizar ReDim com uma matriz que é membro de um objeto de Automatização.

    Remova o ReDim.

    Nota Se não especificar um tipo para uma variável, a variável recebe o tipo predefinido Variante. Isso nem sempre é óbvio. Por exemplo, o seguinte código declara duas variáveis: a primeira, MyVar, é uma Variant; a segunda, AnotherVar, é um Integer.

Dim MyVar, AnotherVar As Integer 

Saiba mais selecionando o item em questão e pressionando F1 (no Windows) ou HELP (no Macintosh).

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.