Share via


Não é possível atribuir ou coagir matriz de cadeia de caracteres de comprimento fixo ou tipo definido pelo usuário ao Variant

Uma Variant só pode aceitar a atribuição de dados com um VarType válido. Esse erro tem as seguintes causas e soluções:

  • Você tentou passar uma matriz de cadeias de caracteres de comprimento fixo. Quando uma única cadeia de caracteres de comprimento fixo é atribuída a uma Variant, ela é coagida a uma cadeia de caracteres de comprimento variável, mas isso não pode ser feito para uma matriz de cadeias de caracteres de comprimento fixo.

    Se você precisar passar a matriz, use um loop para atribuir os elementos individuais da matriz aos elementos de uma matriz temporária de cadeias de caracteres de comprimento variável. Em seguida, você pode atribuir a matriz a uma variante e usar Erase para desalocar a matriz temporária. No entanto, você não pode desalocar uma matriz de tamanho fixo com Erase.

  • Você tentou passar uma cadeia de caracteres de comprimento fixo ou tipo definido pelo usuário para a função VarType ou TypeName .

    Um argumento para a função VarType ou TypeName deve ser um tipo Variant válido.

  • Você tentou atribuir um tipo definido pelo usuário a uma variável Variant . Embora você não possa atribuir diretamente uma variável inteira de tipo definido pelo usuário a uma Variant, você pode usar a função Array para atribuir os elementos individuais de uma variável de tipo definido pelo usuário a uma Variant. Isso produz uma Variant que contém uma matriz de variantes. O VarType de cada elemento nesta matriz de variantes corresponde ao tipo original de cada elemento do tipo definido pelo usuário.

  • Você tentou passar uma matriz de cadeias de caracteres de comprimento fixo ou tipos definidos pelo usuário como um argumento em uma chamada de procedimento que requer um argumento Variant . Observe que sempre que um procedimento está com limite tardio, ou seja, quando a chamada deve ser construída em tempo de execução, todos os argumentos devem ser passados como tipos Variant . Por exemplo, o código a seguir causa o seguinte erro:

      Dim MyForm As Object    ' Because MyForm is Object, binding is late. 
      Set MyForm = New Form1 
      Dim StringArray(10) As String * 12 
      ' The next line generates the error. 
      MyForm.MyProc StringArray 
    

    Para a matriz de cadeia de caracteres, use um loop para atribuir cada membro individual da matriz a uma matriz temporária de cadeias de caracteres de comprimento variável. Em seguida, você pode atribuir essa matriz a uma Variant para passar para o procedimento. Para uma matriz de tipos definidos pelo usuário, você pode usar a função Array para atribuir os elementos individuais de uma variável de tipo definido pelo usuário a uma Variant. Isso produz uma Variant que contém uma matriz de variantes. O VarType de cada elemento nesta matriz de variantes corresponde ao tipo original de cada elemento do tipo definido pelo usuário.

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.