VBA com erro

Excel VBA na declaração de erro

A declaração VBA On Error é um tipo de mecanismo de tratamento de erros que é usado para guiar o código para fazer o que se ele encontrar qualquer tipo de erro, geralmente quando um código encontra um erro a execução para, mas com esta declaração no código a execução do o código continua como tem um conjunto de instruções para fazer quando encontra um erro.

Antecipar o erro no código torna você um profissional na codificação VBA. Você não pode tornar o código 100% eficiente, mesmo se estiver confiante sobre seu código de uma ou outra maneira que ele pode gerar um erro.

É uma tarefa quase impossível identificar e tratar todo tipo de erro, mas temos diferentes maneiras de tratar um erro no VBA. Ao escrever o código, você pode não prever o tipo de código de erro que pode ocorrer, mas se ocorrer algum erro, você gastará mais tempo depurando do que escrevendo o próprio código.

O que é um erro?

Um erro nada mais é do que uma linha de código que não pode ser executada por causa da funcionalidade ou do código errado. Portanto, tente antecipar o erro e resolvê-lo.

Por exemplo, se você tentar excluir a planilha que não está lá, obviamente não podemos executar essa linha de código.

Um erro é de três tipos, um é o erro compilado devido a variáveis ​​não declaradas. O segundo é um erro de entrada de dados devido a entradas erradas pelo codificador, e o terceiro é um erro de tempo de execução devido ao VBA não reconhecer a linha de código. Para tentar acessar ou trabalhar em uma planilha ou pasta de trabalho que não está lá.

Mas temos uma instrução em VBA para lidar com todos esses tipos de erros, ou seja, a instrução “On Error”.

Tipos de declarações de erro

O ponto principal para lidar com erros no VBA é a declaração “On Error”. Por exemplo, em caso de erro "retomar a próxima linha", "ir para ou pular para outra linha", etc ...

A declaração On Error tem três tipos de declarações.

  1. GoTo 0  significa que sempre que ocorrer um erro em tempo de execução, o Excel ou VBA deve exibir a caixa de mensagem de erro informando o tipo de erro encontrado. Assim que o VBA executa o código, ele desabilita todos os manipuladores de erros naquele bloco específico do código.
  2. Resume Next significa que sempre que o erro ocorrer, esta instrução instrui o excel a ignorar esse erro e prosseguir para (continuar a próxima) a próxima linha de código sem exibir nenhuma mensagem de erro. Isso não significa que corrigirá o erro, mas apenas o ignora.
  3. GoTo [rótulo] significa que sempre que o VBA encontrar um erro, vá para o rótulo atribuído. Isso faz com que o código pule para a linha específica fornecida pelo codificador.

3 principais maneiras de lidar com erros em VBA

Você pode baixar este modelo de erro VBA On aqui - Modelo de erro VBA On

# 1 - Em caso de erro, continuar próximo

Suponha que você esteja dividindo o valor de 20 por 0 e tenha declarado a variável para atribuir o resultado da divisão a ela.

Código:

 Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub 

Se você executar este código, ele gerará o erro abaixo.

Portanto, você não pode dividir qualquer número por valor zero. O número do erro de tempo de execução é 11, ou seja, divisão por zero.

Agora vou adicionar mais uma linha ao código.

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer i = 20/0 j = 20/2 End Sub 

Agora vou adicionar a instrução On error resume a próxima no topo.

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub 

Agora, se eu executar este código, ele não me dará nenhuma mensagem de erro, em vez disso, ele executará a próxima linha de código, ou seja, j = 20/2.

# 2 - Em erro GoTo Label

Eu declarei três variáveis.

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer 

Para todas essas três variáveis, atribuirei o cálculo da divisão.

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

O resultado de todos esses três cálculos será mostrado na caixa de mensagem.

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "O valor de i é" & i & vbNewLine & "O valor de j é "& j & _ vbNewLine &" O valor de k é "& k & vbNewLine End Sub 

Agora tentarei executar este código, já que o cálculo de “I” não é adequado, obteremos o erro de tempo de execução 11.

Agora adicionarei a declaração “On Error Resume Next”.

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "O valor de i é" & i & vbNewLine & "O o valor de j é "& j & _ vbNewLine &" O valor de k é "& k & vbNewLine End Sub 

Se eu executar isso, ele ignorará o cálculo “I” e executará os dois cálculos restantes e o resultado é o seguinte.

Agora, em vez de “On Error Resume Next”, adicionarei “On Error GoTo KCalculation”

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "O valor de i is" & i & vbNewLine & "O valor de j é" & j & _ vbNewLine & "O valor de k é" & k & vbNewLine End Sub 

Nota: aqui, “KCalculation” é o nome do rótulo que eu dei, você pode dar o nome do seu próprio rótulo sem nenhum espaço.

Agora, se eu executar esta linha de código, ela não irá pular para a próxima linha, em vez disso, irá pular para o nome do rótulo que eu inseri, ou seja, “KCalcualtion”. Aqui ele irá ignorar o erro dado por “I” e também não executará o cálculo “j” mas imediatamente salta para “KCalcualtion”.

# 3 - Número do erro de impressão em VBA

No final do código, também podemos imprimir o número do erro em uma caixa de mensagem separada. A linha de código a seguir fará esse trabalho.

Código:

Err.Number

Agora vou executar este código, a primeira caixa de mensagem mostrará os resultados do cálculo.

Clique em OK, aparecerá mais uma caixa de mensagem para mostrar o número do erro.

O resultado é 11, isto é, Divisão por Zero.

We can also get the error description instead of the number. We just need to change the code, below is the code.

Code:

Err.Description

It will show a description like this.

Things to Remember

  • After entering “On Error Resume Next” at the end of code don’t forget to add the statement “On Error GoTo 0”
  • The label name should be the same in both places.
  • Label names need not be defined well in advance.
  • In the end, always see what was the error occurred through the separate message box.