Erro de incompatibilidade de tipo VBA

Digite o erro de incompatibilidade ou também podemos chamá-lo de código de erro 13, ocorre quando atribuímos um valor a uma variável que não é de seu tipo de dados, por exemplo, se fornecermos um valor decimal ou longo para uma variável de tipo de dados inteiro, iremos encontrar este erro de incompatibilidade de tipo quando executamos o código que é mostrado como Código de erro 13.

O que é VBA Type Mismatch Error?

O VBA Type Mismatch Error no Excel é um tipo de “Erro de tempo de execução” e é o erro número 13 nesta categoria.

Para começar o aprendizado em VBA e para iniciantes, é difícil encontrar o erro lançado pelos códigos VBA. Lembre-se de que o VBA não está gerando um erro, mas apenas destacando nossos erros ao escrever o código.

Normalmente declaramos variáveis ​​e atribuímos tipos de dados a elas. Quando atribuímos um valor a essas variáveis, precisamos lembrar que tipo de dados ele pode conter, se o valor atribuído não for de acordo com o tipo de dados, obteremos “Erro de tempo de execução 13: Tipo incompatível”.

Como corrigir erro de tempo de execução de incompatibilidade de tipo VBA 13?

Vamos ver alguns exemplos para entender esse erro de incompatibilidade de tipo VBA.

Você pode baixar este modelo VBA Type Mismatch Excel aqui - VBA Type Mismatch Excel Template

VBA Type Mismatch - Exemplo # 1

Para obter um exemplo, veja o código VBA abaixo.

Código:

 Sub Type_MisMatch_Example1 () Dim k As Byte k = "Hiii" MsgBox k End Sub 

Eu declarei a variável “k” como Byte.

Isso significa que a variável “k” pode conter valores de 0 a 255. Mas na próxima linha, atribuí o valor da variável “k” como “Hiii”.

É muito claro que o tipo de dados não pode conter o valor de um texto, então aqui vem o erro de incompatibilidade de tipo.

VBA Type Mismatch - Exemplo # 2

Agora dê uma olhada em mais um exemplo com um tipo de dados diferente. Olhe o código abaixo.

Código:

 Sub Type_MisMatch_Example2 () Dim x As Boolean x = 4556 MsgBox x End Sub 

Declaramos a variável “x” como booleana.

Booleano é um tipo de dados que pode conter o valor TRUE ou FALSE.

No código acima, atribuímos um valor de 4556, que não corresponde aos valores de tipo de dados TRUE ou FALSE.

Quando executamos este código, você esperaria um erro de incompatibilidade de tipo, mas veja o que acontece quando executamos este código.

Você deve estar se perguntando por que isso não dá o erro de tempo de execução 13 do erro de incompatibilidade de tipo.

A razão para isso é que o Excel trata todos os números como VERDADEIROS, exceto zero. O valor zero será tratado como FALSO. É por isso que obtivemos o resultado TRUE em vez de um erro.

Agora veja que atribuirei um valor numérico com texto.

Código:

 Sub Type_MisMatch_Example2 () Dim x As Boolean x = "4556a" MsgBox x End Sub 

Isso definitivamente lançará o Run Time Error 13: Type Mismatch.

Incompatibilidade de tipo VBA - Exemplo # 3

Agora, veja o código abaixo para este exemplo.

Código:

 Sub Type_MisMatch_Example4 () Dim x As Integer Dim y As String x = 45 y = "2019 Jan" MsgBox x + y End Sub 

A variável “x” é um tipo de dados inteiro e “y” é um tipo de dados de string.

X = 45 ey = janeiro de 2019

Na caixa de mensagem, adicionei x + y.

Mas este não é o código perfeito porque não podemos adicionar números com textos de string. Encontraremos o Run Time Error 13.

VBA Type Mismatch - Exemplo # 4

Casos excepcionais

Existem situações em que o Excel perdoa os dados errados atribuídos ao tipo de dados variável. Para obter um exemplo, veja o código abaixo.

Código:

 Sub Type_MisMatch_Example3 () Dim x As Long Dim y As Long x = 58,85 y = "85" MsgBox x & vbNewLine & y End Sub 

Duas variáveis ​​declaradas são “x” e “y”.

Para esta variável, o tipo de dados atribuído é “Longo”.

O tipo de dados longos aceita apenas números inteiros, não valores decimais.

Portanto, a percepção geral é obter o erro de tempo de execução 13 do erro de incompatibilidade de tipo.

Mas vamos ver o que acontece quando executamos esse código.

Uau!!! Obtivemos os valores 59 e 85.

Isso ocorre porque o VBA converterá o valor decimal 58,85 para o valor inteiro mais próximo e, embora os números estejam entre aspas duplas, ele converte apenas para o valor inteiro.