Como ignorar erros usando VBA On Error Resume Next Statement?

Excel VBA em caso de erro, continuar próximo

VBA On Error Resume Next é uma instrução do manipulador de erros. Se o erro ocorrer durante a execução do código, em vez de mostrar o erro, para retomar a próxima linha de código, ignorando a mensagem de erro, você pode usar esta instrução.

Aqueles que escrevem códigos regularmente no Excel VBA sabem que podem obter erros mesmo depois de escrever códigos proficientes, mas querem ignorar esse erro e continuar executando as próximas linhas de código. Um exemplo típico de obtenção de uma mensagem de erro é quando a função de planilha VLOOKUP não encontra o valor de pesquisa na matriz da tabela. Não retornará o erro # N / A; em vez disso, ele lançará o erro. Como “Não é possível obter a propriedade VLOOKUP da classe de função da planilha”.

Se você não sabe por que estamos recebendo esse erro, é muito difícil consertar o bug. No VBA, temos um recurso chamado “ On Error Resume Next ”.

O que On Error Resume Next faz no VBA?

Existem certas áreas como codificador. Teremos certeza de que isso nos dará uma mensagem de erro, mas precisamos ignorar esse erro para continuar percorrendo o código, então como ignorar esse erro é a dúvida comum que todos têm.

Usando a instrução VBA On Error Resume Next, podemos ignorar o erro e retomar a próxima linha de código.

Exemplo 1

Suponha que você tenha muitas planilhas e esteja ocultando algumas delas como parte do projeto VBA. Por exemplo, abaixo estão as planilhas que tenho em minha planilha.

Eu escrevi códigos para ocultar as planilhas de “Vendas e“ Lucro ”, e abaixo está o código.

Código:

Sub On_Error () Worksheets ("Sales"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Agora vou começar a executar o código linha por linha usando a tecla F8 .

Se eu pressionar a tecla F8 mais uma vez, ela ocultará a planilha chamada “ Vendas ”.

Agora pressione a tecla F8 mais uma vez e veja o que acontece.

Temos um erro “Subscrito fora do intervalo” porque a linha de código atual diz o seguinte.

Planilhas ("Lucro 2019"). Visível = xlVeryHidden

Ele está tentando ocultar a planilha chamada “ Lucro 2019, mas não há planilha com o nome “Lucro 2019”.

Nesses casos, se a planilha não existir na pasta de trabalho, precisamos ignorar o erro e continuar a executar o código, ignorando o erro “Subscrito fora do intervalo”.

A próxima linha do código diz

Planilhas ("Lucro"). Visível = xlVeryHidden

Esta planilha existe nesta pasta de trabalho, portanto, sem ignorar o erro, não podemos mover para esta linha de código.

Para ignorar esse erro, precisamos adicionar a declaração “On Error Resume Next”.

Código:

Sub On_Error () On Error Resume Next Worksheets ("Sales"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Como você pode ver acima, adicionei a instrução no topo do código antes de qualquer uma das linhas começar. Agora execute o código e veja o que acontece.

Agora estou na linha que deu o erro anteriormente, pressione a tecla F8 e veja o que acontece.

Eu pulei para a próxima linha de código sem mostrar nenhum erro por causa da instrução que adicionamos no topo, que é a instrução VBA “On Error Resume Next”.

Exemplo # 2

Agora veremos como usar essa instrução com mais um exemplo. Veja a estrutura de dados abaixo para este exemplo.

Temos duas tabelas acima da primeira tabela que têm o nome do emp e seus detalhes de salário na segunda tabela, e temos apenas o nome do emp, então usando VLOOKUP, precisamos buscar os detalhes do salário na tabela do lado esquerdo.

Abaixo está o código que escrevi para buscar os detalhes.

Código:

Sub On_Error1 () Dim k As Long For k = 2 To 8 Cells (k, 6) .Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0) Next k End Sub

Agora execute o código linha por linha e veja o que acontece.

Ao executar o código da primeira célula, obtemos o resultado para o primeiro funcionário. Repita o mesmo para o segundo funcionário.

Desta vez, recebemos a mensagem de erro. Vejamos o segundo nome do funcionário na tabela.

The second employee name is “Gayathri,” but this name doesn’t not exists in the first table, so the VBA VLOOKUP function doesn’t return “#N/A” error when the VLOOKUP doesn’t find the lookup value from the table; rather, it gives the above error message.

Our aim is if the employee name doesn’t find in the table, then we need an empty cell for that employee and ignore the error and give results for the remaining names.

We need to add the “On Error Resume Next” statement inside the loop.

Code:

Sub On_Error1() Dim k As Long For k = 2 To 8 On Error Resume Next Cells(k, 6).Value = WorksheetFunction.VLookup(Cells(k, 5), Range("A:B"), 2, 0) Next k End Sub

Now run the code and see the result.

Dois nomes de funcionários, “ Gayathri & Karanveer, ” não estão na lista, portanto, esses códigos de linha devem ter encontrado um erro, pois adicionamos uma instrução do manipulador de erro “ On Error Resume Next ”, ela ignorou essa linha de código e continuou para o próximo funcionário.

Coisas para lembrar aqui

  • “On Error Resume Next” é a instrução do manipulador de erros quando precisamos ignorar o erro conhecido.
  • Se você deseja ignorar a mensagem de erro apenas para um conjunto específico de código, feche a próxima instrução on error resume adicionando a instrução “ On Error GoTo 0 ”.

Artigos interessantes...