Capítulo 16: Tratamento Robusto de Exceções e Auditoria de Erros
🎯 Objetivo da Aula
Nesta aula, você aprenderá as melhores práticas corporativas de Tratamento de Exceções (Error Handling) no VBA. Você compreenderá como blindar suas aplicações contra travamentos inesperados, eliminando a assustadora janela amarela de depuração que confunde os usuários finais e expõe o código-fonte da empresa. Você dominará as diretivas On Error GoTo, On Error Resume Next e On Error GoTo 0, inspecionará o objeto de sistema Err e construirá mecanismos de auditoria com gravação de logs técnicos de falhas.
Ao final desta aula, você terá desenvolvido o motor resiliente de importação e auditoria financeira da FastLog S.A.
🏢 Cenário Prático (FastLog S.A.)
Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: Durante o fechamento contábil de fim de mês, o robô de liquidação de fretes processava mais de 8.000 lançamentos bancários. Em um dos lotes, um arquivo continha um registro com peso zero (provocando uma divisão por zero: Erro de tempo de execução 11) e outro registro continha uma data inexistente (ex: 31/02/2026). O VBA interrompeu a execução bruscamente com a janela padrão: “Erro de tempo de execução… [Fim] [Depurar]”. Um assistente assustado clicou em “Depurar”, desconfigurou o código-fonte no VBE e deixou a liquidação incompleta, gerando duplicidade de pagamentos de R$ 180.000,00 no dia seguinte.
Sua Missão: Blindar o procedimento LiquidarFretesResiliente, garantindo que nenhum erro derrube a aplicação. O robô deve capturar qualquer falha em tempo de execução, identificar o número e a descrição do erro pelo objeto Err, gravar o incidente em uma trilha de auditoria e exibir uma mensagem amigável e explicativa ao operador.
🧠 Fundamentos: A Teoria Traduzida
1. O Fluxo de Controle com On Error GoTo
Sem tratamento de erro, qualquer exceção interrompe o programa instantaneamente. Com o tratamento estruturado, o controle é desviado suavemente para uma rotina especializada no rodapé do procedimento:
flowchart TD
START["Início da Macro"] --> TRT["On Error GoTo TratarErro"]
TRT --> HAPPY["Execução Normal (Happy Path)<br/>Cálculos, leitura e gravações"]
HAPPY --> CHK{"Ocorreu alguma exceção?<br/>(Divisão por zero, arquivo inexistente)"}
CHK -- NÃO --> EXIT["Exit Sub (Saída limpa normal)"]
CHK -- SIM --> HANDLER["TratarErro: (Tratador de Exceções)<br/>Objeto Err captura detalhes"]
HANDLER --> LOG["Registra Falha no Log de Auditoria"]
LOG --> MSG["MsgBox Amigável: 'Operação cancelada com segurança.'"]
MSG --> FIM["End Sub"]
style START fill:#1a365d,stroke:#fff,stroke-width:2px,color:#fff
style TRT fill:#2c3e50,stroke:#fff,stroke-width:2px,color:#fff
style HAPPY fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff
style CHK fill:#f39c12,stroke:#fff,stroke-width:2px,color:#fff
style EXIT fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style HANDLER fill:#c0392b,stroke:#fff,stroke-width:2px,color:#fff
style LOG fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
style MSG fill:#d35400,stroke:#fff,stroke-width:2px,color:#fff
style FIM fill:#7f8c8d,stroke:#fff,stroke-width:2px,color:#fff2. O Quarteto de Diretivas de Erro do VBA
| Comando | Comportamento | Quando Usar? |
|---|---|---|
On Error GoTo Rótulo | Desvia imediatamente o fluxo para uma seção identificada por um rótulo no rodapé. | Padrão em rotinas corporativas de gravação, cálculo e conexão de banco de dados. |
On Error Resume Next | Ignora solenemente o erro e passa para a linha de código imediatamente seguinte. | Apenas em checagens cirúrgicas (ex: testar se uma aba ou arquivo existe). |
On Error GoTo 0 | Desativa o tratador personalizado e restaura o comportamento padrão do Excel. | Logo após o trecho que usou Resume Next. |
Exit Sub | Encerra o procedimento antes do rótulo de erro. | Obrigatório antes do rótulo, evitando que a rotina de erro seja executada no fluxo normal! |
3. O Objeto Err e Suas Propriedades
Quando uma falha ocorre, o VBA preenche automaticamente o objeto global Err:
Err.Number: Código numérico oficial do erro (ex:11= Divisão por zero;13= Tipos incompatíveis;9= Subscrito fora do intervalo).Err.Description: Descrição textual da falha gerada pelo sistema operacional.Err.Source: Nome do componente que originou o erro.Err.Clear: Limpa os dados do objetoErrda memória.
📖 Exemplo Guiado: Passo a Passo no Laboratório
No computador do laboratório, acesse o VBE com Alt + F11.
Passo 1: Inserção do Módulo de Resiliência
- No menu superior, clique em Inserir ➔ Módulo.
- Na janela de propriedades (
F4), renomeie o módulo para:modResilienciaErros. - Confirme a presença de
Option Explicit.
🛠️ Prática Obrigatória 1: Estruturação do Padrão Try/Catch Corporativo
Construiremos a rotina oficial de liquidação financeira com o padrão arquitetural clássico de blindagem de erros.
Passo a Passo no Computador:
No módulo
modResilienciaErros, digite o seguinte procedimento:Testes Práticos no Excel:
- Alterne para a planilha. Na linha 1, crie os cabeçalhos:
- A1:
Valor_Frete| B1:Peso_Kg| C1:Preco_Por_Kg| D1:Status_Liquidacao
- A1:
- Cenário de Sucesso: Na célula A2, digite
10000e na B2, digite2500. Execute a macro (F5).- Resultado:
R$ 4,00por kg e status"LIQUIDADO COM SUCESSO".
- Resultado:
- Cenário de Falha Crítica 1 (Divisão por Zero): Altere B2 para
0. Execute a macro (F5).- Resultado: Em vez do travamento amarelo do VBA, surge o alerta corporativo vermelho explicando que o peso estava zerado!
- Cenário de Falha Crítica 2 (Texto em Campo Numérico): Altere A2 para
"DEZ MIL". Execute a macro.- Resultado: O sistema captura o Erro 13 (Type Mismatch) e orienta o operador de forma clara!
- Alterne para a planilha. Na linha 1, crie os cabeçalhos:
✅ Resultado Esperado (Prática 1):
A aplicação nunca quebra nem exibe o código-fonte ao usuário, respondendo de forma madura e resiliente a qualquer dado incorreto.
🛠️ Prática Obrigatória 2: Gravação da Trilha de Auditoria Técnica
Agora criaremos uma rotina utilitária que persiste as falhas ocorridas em uma aba de auditoria oculta (Auditoria_Erros), permitindo que a equipe de TI analise as ocorrências sem incomodar os operadores de campo.
Passo a Passo no Computador:
- No mesmo módulo, adicione a sub-rotina de auditoria e integre-a ao tratador de erro:
- Adicione a seguinte linha dentro do bloco
TratarErro:da sua macro anterior: - Provoque novamente um erro de propósito e verifique a nova aba
"Auditoria_Erros"criada automaticamente com o registro forense do erro, data, hora e o nome do usuário do Windows!
✅ Resultado Esperado (Prática 2):
Todas as exceções ocorridas na empresa são registradas silenciosamente com data, hora e login do Windows para fins de governança de TI.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_VBA_SeuNome_SeuSobrenome.xlsm. - Acesse a plataforma Microsoft Teams.
- Abra a tarefa: “VBA - Cap 16: Tratamento de Exceções e Resiliência”.
- Anexe sua pasta de trabalho e entregue.
💡 Checkpoint de Gestão & TI
No padrão internacional de governança de software (como COBIT e ISO 27001), nenhum sistema corporativo pode expor telas de depuração aos operadores comuns. A exibição de código-fonte aberto permite a manipulação não autorizada de regras de faturamento e expõe senhas de conexão com bancos de dados. Um tratamento de erro profissional é o divisor de águas entre scripts amadores e sistemas de TI de padrão industrial.
🔥 Desafio de Fixação: Rollback de Transação Financeira
Implemente o conceito de Rollback (Desfazer Alterações):
- Antes de iniciar as alterações, armazene o valor antigo da célula em uma variável de backup (
curBackupValor = ws.Range("C2").Value). - Se a macro falhar no meio do processamento (dentro de
TratarErro:), restaure o valor original da planilha a partir da variável de backup: - Isso garante o princípio ACID: ou a transação é 100% concluída ou o sistema volta ao estado original sem corrupção de dados!
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que você estudou neste capítulo. Ao concluir, apresente o caderno ao professor para visto.
- Por que permitir que a janela de depuração amarela do VBA apareça para um usuário final é considerado uma falha grave de segurança e usabilidade?
- Como funciona a instrução
On Error GoTo NomeDoRotulo? - Qual é a função indispensável da instrução
Exit Subposicionada logo antes do rótulo de tratamento de erros? - O que a instrução
On Error Resume Nextfaz e por que devemos ter muito cuidado ao utilizá-la? - Qual é a finalidade da instrução
On Error GoTo 0? - Quais informações cruciais o objeto de sistema
Errfornece através das propriedades.Numbere.Description? - Cite dois códigos numéricos de erro comuns do VBA e explique o que eles significam.
- Como a função de sistema
Environ("USERNAME")foi utilizada no registro forense de logs? - O que significa o conceito transacional de Rollback e por que ele é crucial em fechamentos financeiros?
- Como a padronização de tratamento de erros colabora com auditorias de segurança da informação (ISO 27001)?