Share via


Incompatibilidade de tipo de argumento ByRef

Um argumento passado ByRef (por referência), o padrão, deve ter exatamente o tipo de dados esperado no procedimento. Esse erro tem a seguinte causa e solução:

  • Você passou um argumento de um tipo que não pôde ser imposto como o tipo esperado.

    Por exemplo, esse erro ocorrerá se você tentar passar uma variável Integer quando Long for esperado. Se quiser que a coerção ocorra, mesmo que isso cause a perda de informações, você poderá passar o argumento dentro de seu próprio conjunto de parênteses.

    Por exemplo, para passar o argumento VariantMyVar para um procedimento que espera um argumento Integer, você pode escrever a chamada da seguinte maneira:

      Dim MyVar 
      MyVar = 3.1415 
      Call SomeSub((MyVar)) 
    
      Sub SomeSub (MyNum As Integer) 
      MyNum = MyNum + MyNum 
      End Sub
    

    Colocar o argumento dentro de seu próprio conjunto de parênteses força sua avaliação como uma expressão. Durante a avaliação, a parte fracionária do número é arredondada (não truncada) para que ele esteja em conformidade com o tipo de argumento esperado. O resultado da avaliação é colocado em um local temporário, e uma referência ao local temporário é recebida pelo procedimento. Portanto, o MyVar original mantém seu valor.

    Observação

    Se você não especificar um tipo para uma variável, ela receberá o tipo padrão Variant. 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.