Capítulo 02: Tipagem Estática, Declaração Rigorosa (Option Explicit) e Depuração
🎯 Objetivo da Aula
Nesta aula, você aprenderá as regras fundamentais de engenharia de software aplicadas ao VBA: a obrigatoriedade da diretiva Option Explicit, a tipagem estática e eficiente de variáveis na memória RAM com a instrução Dim, o uso de operadores aritméticos e a técnica de inspeção em tempo real utilizando a Janela de Verificação Imediata (Ctrl + G) e o método Debug.Print.
Ao término deste laboratório, você terá construído o motor de cálculo tarifário da transportadora, eliminando falhas de digitação e assegurando precisão contábil com o tipo Currency.
🏢 Cenário Prático (FastLog S.A.)
Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: No mês anterior, o setor de faturamento da FastLog sofreu um prejuízo contábil de R$ 42.000,00. Um assistente havia criado uma macro sem tipagem estática para calcular o frete rodoviário de cargas pesadas. Devido a um erro de digitação no código (ValorFrete foi digitado como ValorFrete_ em uma linha), o VBA criou automaticamente uma nova variável vazia com valor zero, isentando indevidamente a taxa de seguro de 12 carretas com eletrônicos de alto valor.
Sua Missão: Como desenvolvedor de automações corporativas, você ativará a diretiva Option Explicit para blindar o sistema contra variáveis fantasmas, declarará tipos de dados estritos (Long, Double, Currency, Date) e criará o procedimento CalcularFreteExpedicao, que lê os dados brutos da planilha, calcula o frete-peso, o seguro Ad Valorem e grava o valor total liquidado com precisão de centavos.
🧠 Fundamentos: A Teoria Traduzida
1. O Perigo do Tipo Variant e a Diretiva Option Explicit
Por padrão, se você não declarar uma variável no VBA, ele a cria automaticamente como Variant. O tipo Variant consome até 16 bytes de memória (contra apenas 4 bytes de um Long), é lento e aceita qualquer valor sem alertar sobre erros de digitação.
Para impedir isso, inserimos sempre na primeira linha do módulo:
Essa diretiva força o compilador a recusar qualquer variável que não tenha sido previamente declarada com a palavra-chave Dim (Dimension).
flowchart TD
CODIGO["Código VBA com Option Explicit"] --> COMP["Compilação / Execução"]
COMP --> DEC{"A variável foi declarada com Dim?"}
DEC -- SIM --> RAM["Alocação de Memória RAM Tipada<br/>(Long: 4B, Currency: 8B, String)"]
DEC -- NÃO --> ERRO["❌ ERRO DE COMPILAÇÃO:<br/>'Variável não definida'<br/>Impede prejuízos financeiros!"]
style CODIGO fill:#1a365d,stroke:#fff,stroke-width:2px,color:#fff
style COMP fill:#2c3e50,stroke:#fff,stroke-width:2px,color:#fff
style DEC fill:#f39c12,stroke:#fff,stroke-width:2px,color:#fff
style RAM fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff
style ERRO fill:#c0392b,stroke:#fff,stroke-width:2px,color:#fff2. Tabela de Tipos Primitivos do VBA Corporativo
| Tipo de Dado | Tamanho | Faixa de Valores | Caso de Uso na Logística |
|---|---|---|---|
Long | 4 bytes | -2.147.483.648 a 2.147.483.647 | IDs de Carga, Número de Nota Fiscal, Linhas de Planilha (Row) |
Double | 8 bytes | Ponto flutuante de precisão dupla | Peso em kg (ex: 14250.75), Quilometragem, Densidade cúbica |
Currency | 8 bytes | -922 trilhões a +922 trilhões (4 decimais fixas) | Valores monetários, Frete, Impostos, Pedágios (sem erro de arredondamento) |
String | 10 bytes + tam | Texto alfanumérico | Placas de veículos, Nome de motoristas, Cidades de destino |
Boolean | 2 bytes | True ou False | Status de Carga Frágil, Seguro Aprovado, Veículo Liberado |
Date | 8 bytes | 01/01/0100 a 31/12/9999 | Data de Emissão do CTe, Previsão de Entrega |
No VBA antigo utilizava-se Integer (2 bytes, limitado a 32.767). Como as planilhas do Excel possuem 1.048.576 linhas, nunca utilize Integer para contadores ou linhas; utilize sempre Long!
3. Operadores Aritméticos Especiais do VBA
Além dos tradicionais soma (+), subtração (-), multiplicação (*) e divisão real (/), o VBA possui operadores matemáticos dedicados:
\(Divisão Inteira): Retorna apenas a parte inteira da divisão (ex:10 \ 3 = 3).Mod(Resto da Divisão): Retorna o resto (ex:10 Mod 3 = 1). Excelente para despachar frotas em lotes de caixas.^(Exponenciação): Eleva à potência (ex:2 ^ 3 = 8).
4. Depuração com Debug.Print e Janela Imediata
Para inspecionar cálculos sem travar a tela do usuário com centenas de caixas de mensagem (MsgBox), utilizamos:
O resultado é impresso diretamente na Janela de Verificação Imediata (Ctrl + G no VBE).
📖 Exemplo Guiado: Passo a Passo no Laboratório
No Excel, abra a pasta de trabalho criada no Capítulo 01 (.xlsm) ou crie uma nova pasta habilitada para macros.
Passo 1: Configuração Automática de Option Explicit
- Abra o VBE pressionando
Alt + F11. - No menu superior, clique em Ferramentas ➔ Opções.
- Na guia Editor, marque a caixa de seleção: ☑ Requer Declaração de Variável.
- Clique em OK.
(A partir de agora, qualquer novo módulo criado virá automaticamente comOption Explicitno topo!).
Passo 2: Inserção de um Novo Módulo
- No menu superior, clique em Inserir ➔ Módulo.
- Na Janela de Propriedades (
F4), altere a propriedade(Name)deMódulo1para:modCalculoFrete.
🛠️ Prática Obrigatória 1: Cálculo Tarifário de Fretes e Adicional de Seguro (F8)
Construiremos a rotina oficial de precificação de viagens rodoviárias da FastLog.
Passo a Passo no Computador:
No módulo
modCalculoFrete, digite o seguinte código completo:Preparação dos Dados na Planilha do Excel:
- Alterne para o Excel (
Alt + F11). - Na linha 1, configure as seguintes colunas:
- A1:
ID_Carga - B1:
Peso_Kg - C1:
Distancia_Km - D1:
Valor_Mercadoria - E1:
Custo_Peso - F1:
Custo_Distancia - G1:
Seguro_AdValorem - H1:
Total_Frete - I1:
Data_Calculo
- A1:
- Na linha 2, insira os dados do transporte de teste:
- A2:
CARGA-9941| B2:12500| C2:680| D2:350000
- A2:
- Alterne para o Excel (
Depuração com a Tecla
F8e Janela de Variáveis Locais:- No VBE, clique no menu Exibir ➔ Janela Variáveis Locais.
- Posicione o cursor dentro de
Sub CalcularFreteExpedicao()e tecleF8. - Observe a janela de variáveis locais: cada variável declarada surge com seu tipo exato e valor atualizado a cada linha percorrida!
✅ Resultado Esperado (Prática 1):
Na linha 2 da planilha, as colunas E, F, G e H são preenchidas automaticamente:
- Custo Peso: R$ 23.125,00 (
12.500 * 1,85) - Custo Distância: R$ 2.856,00 (
680 * 4,20) - Seguro: R$ 1.225,00 (
350.000 * 0,0035) - Total do Frete: R$ 27.206,00
- Data do Cálculo: Data atual do computador.
🛠️ Prática Obrigatória 2: Inspeção de Variáveis na Janela Imediata (Debug.Print)
Agora você utilizará a ferramenta de console do VBE para registrar o log do cálculo e simular divisões de carga em pallets.
Passo a Passo no Computador:
- No VBE, pressione
Ctrl + Gpara exibir a Janela de Verificação Imediata (na parte inferior do VBE). - Adicione ao final do procedimento
CalcularFreteExpedicao(antes deEnd Sub) as seguintes instruções de auditoria técnica: - Pressione
F5para executar a rotina diretamente. - Visualize o log técnico gerado na Janela Imediata!
✅ Resultado Esperado (Prática 2):
A Janela de Verificação Imediata exibe:
📤 Instruções de Entrega (Microsoft Teams)
- Certifique-se de salvar a pasta de trabalho com suporte a macros (
.xlsm). - Nomeie o arquivo como:
Atividade_02_VBA_SeuNome_SeuSobrenome.xlsm. - Acesse o Microsoft Teams na equipe da sua turma.
- Abra a tarefa: “VBA - Cap 02: Tipagem Estática e Option Explicit”.
- Anexe sua planilha e envie.
💡 Checkpoint de Gestão & TI
A tipagem de dados não é mero capricho estético: em sistemas financeiros e logísticos, o uso do tipo de dados correto evita erros de estouro de memória (Overflow Error 6) e imprecisões de arredondamento de ponto flutuante. Ao utilizar Currency em vez de Double para tarifas, garantimos que operações com centavos não sofram com resíduos binários como 0,0000000000000001, preservando a conformidade fiscal com a Receita Federal e auditorias contábeis.
🔥 Desafio de Fixação: Cálculo de Pedágio e Arredondamento Bancário
Adicione ao cálculo o valor dos pedágios rodoviários:
- No trecho de constantes, adicione a taxa média de pedágio:
- Declare a variável
lngEixosCaminhao As Longe leia o valor digitado na célula J2 (suponha um caminhão truck de 3 eixos). - Calcule o custo de pedágio (
lngEixosCaminhao * TAXA_PEDAGIO_POR_EIXO * (dblDistanciaKm \ 100)— considerando uma praça de pedágio a cada 100 km inteiros). - Some o valor do pedágio à variável
curFreteTotale exiba o resultado na célula K2.
📝 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.
- Qual é o papel da diretiva
Option Explicitquando inserida na primeira linha de um módulo VBA? - Por que confiar no tipo de dado padrão
Varianté considerado uma prática de má qualidade e arriscada em ambientes corporativos? - O que acontece em tempo de execução se você tentar rodar um código com
Option Explicitcontendo uma variável com erro de digitação? - Qual é a diferença fundamental de capacidade e recomendação de uso entre os tipos de dados
IntegereLongno Excel contemporâneo? - Por que valores monetários e financeiros devem ser declarados com o tipo
Currencyem vez deDouble? - O que o operador aritmético de barra invertida (
\) realiza no VBA e como ele se diferencia da barra comum (/)? - Explique a finalidade do operador matemático
Mode cite um exemplo de aplicação prática na área de transportes. - Qual atalho do teclado deve ser utilizado no ambiente VBE para abrir a Janela de Verificação Imediata?
- Qual é a utilidade do comando
Debug.Printdurante o desenvolvimento e teste de rotinas complexas? - O que significa a palavra-chave
Conste por que ela é indicada para valores de alíquotas de impostos e taxas contratuais?