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.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de