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 Variant
MyVar
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.