Como Capturar Erros VBA no Word Sem Interromper a Macro
🔍 WiseChecker

Como Capturar Erros VBA no Word Sem Interromper a Macro

Quando uma macro VBA do Word encontra um erro de tempo de execução, ela para a execução e exibe uma caixa de diálogo de erro padrão. Isso interrompe a operação, muitas vezes deixando o documento em um estado incompleto ou corrompido. A causa é o comportamento padrão de tratamento de erros no VBA, que trata qualquer erro não tratado como uma falha crítica. Este artigo explica como usar a captura estruturada de erros com as instruções On Error Resume Next e On Error GoTo para manter sua macro funcionando sem problemas.

Principais Conclusões: Capture Erros VBA no Word de Forma Elegante

  • On Error Resume Next: Instrui o VBA a ignorar um erro de tempo de execução e continuar com a próxima linha de código, ideal para operações não críticas.
  • On Error GoTo [Rótulo]: Envia a execução para uma rotina de tratamento de erros rotulada quando ocorre um erro, permitindo registrar ou corrigir o problema.
  • Objeto Err (Err.Number, Err.Description, Err.Clear): Fornece detalhes sobre o último erro; use Err.Clear após o tratamento para redefinir o estado do erro.

ADVERTISEMENT

Como o Tratamento de Erros VBA Funciona em Macros do Word

VBA, a linguagem de macro do Word, usa um modelo de execução sequencial. Quando ocorre um erro em uma linha, o comportamento padrão é parar a macro e mostrar uma caixa de diálogo com o número e a descrição do erro. Isso é controlado pelo manipulador de erros interno do VBA. Para alterar esse comportamento, você insere instruções específicas de tratamento de erros no início do seu procedimento ou antes do bloco de código arriscado.

Os dois métodos principais são a supressão inline de erros com On Error Resume Next e o desvio estruturado de erros com On Error GoTo. Cada um serve a um propósito diferente. On Error Resume Next é melhor quando você espera erros ocasionais que não afetam o resultado geral, como um marcador ausente ou um intervalo protegido. On Error GoTo é melhor quando você precisa registrar o erro, limpar recursos ou sair do procedimento com segurança.

Após capturar um erro, você deve verificar o objeto Err para ver se ocorreu um erro. A propriedade Err.Number retorna o código do erro, e Err.Description retorna a mensagem. Após o tratamento, chame Err.Clear para redefinir o estado do erro. Se você não limpar o erro, chamadas subsequentes de On Error Resume Next ainda verão o erro antigo.

Passos para Implementar On Error Resume Next para Operações Não Críticas

Este método é ideal para operações que podem falhar, mas onde a falha é aceitável, como excluir um marcador que pode não existir ou aplicar formatação a uma seleção que pode estar vazia.

  1. Abra o editor VBA
    Pressione Alt+F11 no Word para abrir o editor Microsoft Visual Basic for Applications. Localize o módulo que contém sua macro no painel do Explorer de Projetos.
  2. Insira a instrução On Error antes do código arriscado
    Coloque o cursor no início do procedimento ou logo antes da linha que pode falhar. Digite On Error Resume Next. Isso instrui o VBA a ignorar qualquer erro de tempo de execução e passar para a próxima linha.
  3. Escreva a operação que pode falhar
    Por exemplo, para excluir um marcador sem travar se ele não existir: ActiveDocument.Bookmarks("Temp").Delete. Se o marcador estiver ausente, a macro continua.
  4. Verifique o objeto Err após a operação
    Adicione um bloco If Err.Number <> 0 Then para opcionalmente registrar ou ignorar o erro. Por exemplo:
    If Err.Number <> 0 Then
    Debug.Print "Erro " & Err.Number & ": " & Err.Description
    Err.Clear
    End If
  5. Restaure o tratamento de erros padrão
    Após a seção arriscada, adicione On Error GoTo 0 para reverter ao tratamento de erros padrão para o restante da macro. Isso garante que erros inesperados posteriores no código não sejam ignorados silenciosamente.

ADVERTISEMENT

Passos para Implementar On Error GoTo para Tratamento Centralizado de Erros

Use este método quando precisar realizar ações de limpeza ou sair da macro de forma segura após a ocorrência de um erro. Ele centraliza toda a lógica de erro em uma seção rotulada.

  1. Declare o rótulo de erro no início do procedimento
    No topo da sua macro, após a linha Sub ou Function, adicione On Error GoTo ErrorHandler. O nome do rótulo pode ser qualquer um, mas ErrorHandler é padrão.
  2. Escreva o código principal da macro normalmente
    Inclua todas as operações necessárias. Se qualquer linha causar um erro, a execução salta imediatamente para o rótulo.
  3. Adicione um Exit Sub ou Exit Function antes do rótulo
    Coloque Exit Sub ou Exit Function logo antes do rótulo de erro. Isso impede que o código de tratamento de erro seja executado quando nenhum erro ocorrer.
  4. Escreva o bloco de tratamento de erro
    Digite ErrorHandler: em sua própria linha. Abaixo, adicione código para tratar o erro. Por exemplo:
    ErrorHandler:
    MsgBox "Erro " & Err.Number & ": " & Err.Description, vbCritical
    Resume Next

    A instrução Resume Next retorna a execução para a linha imediatamente após a que causou o erro. Alternativamente, use Resume para tentar novamente a linha com falha, ou Resume ExitHere para pular para um segundo rótulo que lida com a limpeza.
  5. Limpe o objeto de erro
    Adicione Err.Clear no final do manipulador de erro para redefinir o estado do erro antes que a macro continue ou termine.

Erros Comuns de Captura e Como Evitá-los

Esquecer de restaurar o tratamento de erros padrão após On Error Resume Next

Se você não adicionar On Error GoTo 0 após a seção arriscada, todo o restante da macro será executado com erros suprimidos. Isso pode ocultar bugs e tornar a depuração impossível. Sempre restaure o tratamento padrão assim que a operação arriscada for concluída.

Usar Resume sem um rótulo válido após On Error GoTo

A instrução Resume só pode ser usada dentro de um manipulador de erro ativo. Se você chamar Resume sem um rótulo, ou se o rótulo estiver escrito incorretamente, o VBA gera um novo erro. Certifique-se de que o nome do rótulo corresponda exatamente e que o manipulador esteja acessível.

Não limpar o objeto Err antes da próxima verificação de erro

Se você verificar Err.Number após uma operação, mas não chamar Err.Clear, o próximo bloco On Error Resume Next ainda verá o erro antigo. Isso causa falsos positivos em suas verificações de erro. Sempre limpe o objeto após o tratamento.

ADVERTISEMENT

On Error Resume Next vs On Error GoTo: Principais Diferenças

Item On Error Resume Next On Error GoTo
Comportamento do erro Ignora o erro e continua na próxima linha Salta para um manipulador rotulado
Melhor caso de uso Falhas esperadas e não críticas Falhas críticas que precisam de limpeza ou registro
Visibilidade do erro Deve verificar o objeto Err manualmente Manipulador é executado automaticamente no erro
Restauração necessária Sim, use On Error GoTo 0 Não é necessário, mas o manipulador deve sair corretamente
Opções de Resume Não aplicável Resume, Resume Next, Resume [rótulo]

Agora você tem dois métodos confiáveis para capturar erros VBA no Word sem interromper sua macro. Comece aplicando On Error Resume Next em operações simples e não críticas para evitar interrupções. Para macros mais complexas que exigem limpeza, use On Error GoTo com um manipulador dedicado. Teste suas macros em uma cópia do documento primeiro e sempre verifique o objeto Err após a supressão inline de erros. Uma dica avançada: combine ambos os métodos usando On Error Resume Next para operações individuais dentro de um loop e envolva todo o loop em um manipulador On Error GoTo para capturar erros fatais inesperados.

ADVERTISEMENT