Este tutorial demonstrará como garantir que o VBA ignore um erro ao executar seu código.
Às vezes, ao construir o código VBA, você realmente deseja que o VBA ignore uma linha de código quando ocorrer um erro. Na verdade, isso pode ser muito útil se, por exemplo, você quiser excluir uma planilha se ela existir, mas ignorar essa linha de código se a planilha não existir.
(Consulte nosso Guia de tratamento de erros para obter mais informações sobre erros VBA)
On Error Resume Next
Para ignorar uma linha de código em um procedimento, usamos o On Error Resume Next demonstração.
123456 | Sub TestErrorIgnore ()On Error Resume NextActiveWorkbook.Sheets ("Sheet4"). SelecioneActiveSheet.Delete'mais código aquiEnd Sub |
No exemplo acima, um On Error Resume Next declaração foi colocada no topo do procedimento. O código é então construído para selecionar a Planilha4 e excluí-lo.
No entanto, devido ao On Error Resume Next , se o código não encontrar a Planilha4, ele continuará para a próxima linha e excluirá qualquer planilha ativa que encontrar.
Isso pode ser muito perigoso se for apenas a Planilha 4 que você deseja excluir e não apenas a Planilha que está ativa. Para evitar esse erro, podemos definir uma variável para a planilha 4 e excluir apenas essa planilha SE ela existir.
1234567 | Sub TestErrorIgnore ()Dim ws como planilhaOn Error Resume NextDefina ws = ActiveWorkbook.Sheets ("Sheet4")ws.Delete'mais código aquiEnd Sub |
Agora, quando o código for executado, apenas a Planilha 4 será excluída E SE A Planilha4 realmente existe. Se a Folha 4 não existir, o VBA irá ignorar o erro e seguir em frente.
Outro exemplo disso é se você deseja excluir todas as planilhas de sua pasta de trabalho usando um loop. Como uma pasta de trabalho do Excel deve ter pelo menos uma planilha, o código excluirá todas as planilhas, exceto uma.
123456 | Sub DeleteSheets ()Dim ws como planilhaPara cada ws em ActiveWorkbook.Sheetsws.DeletePróximo wsEnd Sub |
O código acima irá parar com um erro.
Clicando Depurar nos levará ao código com a linha ofensiva destacada!
No entanto, adicionando o On Error Resume Next linha para o código evitará o erro e a rotina sempre deixará uma planilha na pasta de trabalho.
12345678 | Sub DeleteSheets ()'adicionar linha de erro aquiOn Error Resume NextDim ws como planilhaPara cada ws em ActiveWorkbook.Sheetsws.DeletePróximo wsEnd Sub |
No erro GoTo 0
Freqüentemente, se você usa On Error Resume Next para ignorar um erro, você deseja a interceptação de erro posteriormente no código ou deseja que seu código pare de ser executado se ocorrer um erro no futuro. Podemos redefinir o tratamento de erros para que o código mais uma vez seja interrompido em caso de erros, adicionando a linha On Error GoTo 0.
12345678 | Sub TestErrorIgnore ()Dim ws como planilhaOn Error Resume NextDefina ws = ActiveWorkbook.Sheets ("Sheet4")ws.DeleteNo erro GoTo 0'mais código aquiEnd Sub |