Capítulo 18: VBA I - Sintaxe, Variáveis, Tipos de Dados e Condicionais
🎯 Objetivo da Aula
Nesta aula, você cruzará definitivamente a fronteira entre um usuário de planilhas e um desenvolvedor de software corporativo. Você aprenderá a escrever código VBA diretamente no editor de código (VBE), sem depender do gravador.
Ao final desta aula, você dominará:
- A anatomia de procedimentos:
Sub(Sub-rotinas) vsFunction(Funções Personalizadas). - A importância da diretiva
Option Explicite a declaração de variáveis na memória RAM comDim. - A tabela completa de Tipos Primitivos de Dados em VBA (
Long,Double,String,Boolean,Date). - Estruturas de controle de fluxo condicional:
If...Then...ElseIf...ElseeSelect Case. - Caixas de diálogo interativas com
MsgBoxeInputBox. - Técnicas profissionais de Depuração de Código utilizando a tecla
F8(Passo a Passo) e a Janela Imediata.
🏢 O Cenário Prático (Seu Desafio)
Situação: Na central de operações da FastLog, as solicitações de frete acima de R$ 10.000,00 representam alto risco de sinistro (roubo de carga ou acidentes com cargas valiosas) e necessitam de contratação mandatória de escolta armada. Fretes entre R$ 3.000,00 e R$ 10.000,00 exigem apenas rastreamento via satélite, e fretes abaixo de R$ 3.000,00 possuem liberação padrão.
Missão: Você deve programar um algoritmo em VBA que leia o valor do frete e o tipo da carga digitados na planilha, tome a decisão de segurança correta e exiba um alerta visual e sonoro para o operador logístico com botões de confirmação.
🧠 Fundamentos: A Teoria da Linguagem VBA
1. A Anatomia do Código: Sub vs Function
No VBA, todo bloco de execução é chamado de Procedimento. Existem dois tipos principais:
graph TD
Proc[Procedimentos VBA] --> SubRoutine["Sub (Sub-rotina)"]
Proc --> Func["Function (Função / UDF)"]
SubRoutine --> SubDesc["Executa ações no Excel<br/>(Pinta células, abre telas, deleta dados)<br/>NÃO retorna valor para fórmulas"]
Func --> FuncDesc["Realiza cálculos matemáticos ou de texto<br/>RETORNA um valor final<br/>Pode ser usada como fórmula personalizada na célula"]
style SubRoutine fill:#217346,stroke:#fff,stroke-width:2px,color:#fff
style Func fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff- Exemplo de Sub:
- Exemplo de Function (Fórmula Própria / UDF):(Você pode digitar na célula do Excel:
=CalcularICMS(1000)e o Excel retornará 180!)
2. Variáveis, Memória e a Diretiva Option Explicit
Uma Variável é um endereço reservado na memória RAM do computador para armazenar temporariamente uma informação durante o processamento do código.
Para declarar uma variável em VBA, utilizamos a palavra-chave Dim (Dimension):
A Boa Prática de Ouro: Option Explicit
No topo de qualquer módulo de código, escreva sempre Option Explicit. Essa instrução obriga você a declarar formalmente todas as variáveis. Se você errar a digitação do nome de uma variável no meio de 500 linhas de código, o VBA avisará o erro na hora de compilar, evitando falhas silenciosas graves nos cálculos financeiros.
3. Tabela Completa de Tipos de Dados em VBA
Escolher o tipo de dado correto garante performance e economia de memória:
| Tipo VBA | O que armazena? | Intervalo de Valores | Exemplo de Uso Logístico |
|---|---|---|---|
Integer | Número inteiro curto | -32.768 até 32.767 | Contagem de caixas pequenas |
Long | Número inteiro longo | -2.147.483.648 até 2.147.483.647 | Número da Linha da Planilha (O Excel tem 1.048.576 linhas) |
Double | Decimal de alta precisão | Números com casas decimais (64 bits) | Valores monetários, quilometragens, pesos |
Currency | Moeda de ponto fixo | Evita erros de arredondamento financeiro | Balanço patrimonial, Faturamento |
String | Texto alfanumérico | Letras, símbolos e dígitos de texto | Nomes de cidades, placas, códigos de rastreio |
Boolean | Valor lógico | Apenas True (Verdadeiro) ou False (Falso) | cargaEntregue = True, temSeguro = False |
Date | Data e Hora | 01/01/0100 até 31/12/9999 | Prazos de entrega, horários de chegada |
Variant | Tipo genérico (Curinga) | Aceita qualquer tipo de dado | Padrão do VBA se você não declarar o tipo (consome mais memória) |
4. Operadores da Linguagem VBA
A. Aritméticos
+(Soma),-(Subtração),*(Multiplicação),/(Divisão real)\(Divisão inteira:7 \ 2retorna3)Mod(Resto da divisão:7 Mod 2retorna1)^(Exponenciação:2 ^ 3retorna8)
B. Relacionais e Lógicos
- Comparação:
=,<>,>,<,>=,<= - Lógicos:
And(Todas verdadeiras),Or(Pelo menos uma verdadeira),Not(Inversão lógica) - Concatenação de Textos: Operador
&(ex:"Olá, " & nomeMotorista)
5. Estruturas Condicionais no Código
A. Estrutura If ... Then ... ElseIf ... Else ... End If
Usada quando avaliamos regras com intervalos contínuos ou múltiplas portas lógicas:
B. Estrutura Select Case (A Escolha Múltipla Limpa)
Ideal para comparar uma única variável com múltiplos valores fixos específicos (como Estados, Categorias ou Modais de Transporte):
Quando o critério é uma faixa numérica aberta (por exemplo, “qualquer valor acima de X”), em vez de listar valores fixos, use a palavra-chave Case Is seguida de um operador de comparação:
6. Caixas de Interação: MsgBox Avançado e InputBox
Ícones e Botões do MsgBox:
Ao exibir uma mensagem, você pode combinar ícones e botões somando suas constantes:
- Ícones:
vbInformation(Azul/Informativo),vbExclamation(Amarelo/Atenção),vbCritical(Vermelho/Erro Crítico). - Botões:
vbOKOnly(Apenas OK),vbYesNo(Sim/Não),vbOKCancel(OK/Cancelar). - Captura de Resposta:
7. Funções Úteis de Conversão, Texto e Formatação
Ao ler um valor digitado pelo usuário (via InputBox ou célula), ele geralmente chega como texto. O VBA oferece funções prontas para converter e formatar esses valores, usadas nos exemplos e práticas deste capítulo:
| Função | O que faz | Exemplo |
|---|---|---|
CInt(valor) | Converte texto/número para Integer | CInt("15") → 15 |
CDbl(valor) | Converte texto/número para Double | CDbl("12500") → 12500 |
FormatCurrency(valor) | Formata um número como moeda (R$) | FormatCurrency(300) → "R$ 300,00" |
UCase(texto) | Converte todo o texto para MAIÚSCULAS | UCase("eletrônicos") → "ELETRÔNICOS" |
Trim(texto) | Remove espaços em branco nas pontas (o ARRUMAR do Excel, em VBA) | Trim(" SP ") → "SP" |
O VBA também disponibiliza constantes prontas de texto e cor, sem precisar declará-las com Dim:
vbCrLf— insere uma quebra de linha dentro de umaMsgBox(equivale a apertar Enter no meio do texto).vbRed,vbBlack,vbWhite— cores prontas para usar emFont.ColorouInterior.Color, como atalho para não precisar calcular comRGB().
O sinal _ no final da linha
Quando uma instrução VBA fica muito longa, você pode “quebrá-la” visualmente em várias linhas terminando cada uma com um espaço seguido de sublinhado (_). O VBA entende que o comando continua na linha de baixo — é só organização visual, não muda o que o código faz.
8. O Superpoder da Depuração: Execução Passo a Passo (F8)
Programadores profissionais não adivinham onde está o erro; eles assistem a execução em câmera lenta:
- Abra o VBE (
Alt + F11) e clique dentro de qualquerSub. - Pressione a tecla
F8no teclado: uma linha amarela destacará a instrução atual. - A cada novo toque no
F8, o VBA executa rigorosamente apenas aquela linha. - Passe o mouse em cima das variáveis para ver o valor que elas estão guardando em tempo real na memória.
- Abra a Janela de Verificação Imediata (
Ctrl + G), digite?valorFretee aperte Enter para interrogar o sistema.
📖 Exemplo Guiado: Criando uma Calculadora de Diárias com Validação
Vamos criar uma rotina que pergunta a quantidade de dias viajados por um motorista e calcula o valor do reembolso, alertando se houver excesso de dias.
Passo a Passo
- Abra o editor VBA (
Alt + F11). - No menu superior, clique em Inserir > Módulo.
- Digite o código completo abaixo:
✅ Teste de Execução
Pressione F5 para rodar ou aperte F8 para acompanhar cada linha sendo executada passo a passo.
🛠️ Prática Obrigatória 1: Triagem Automática de Apólices de Carga
Passo 1: Estruturando a Planilha de Risco
Na Planilha 1, crie os campos de consulta nas células A1 até B4:
- A1:
=== AVALIAÇÃO DE RISCO DE EMBARQUE === - A3:
Valor Declarado da Carga (R$):| B3: (Digite12500) - A4:
Categoria da Carga:| B4: (DigiteEletrônicos)
Passo 2: Codificando a Regra de Negócio no VBE
No Módulo 1, crie o procedimento de auditoria:
Passo 3: Criando o Botão de Disparo
Desenhe um retângulo na célula D3 com o texto 🛡️ AUDITAR RISCO e atribua a macro AvaliarRiscoCarga.
✅ Resultado Esperado (Prática 1)
Ao clicar no botão com valor 12500, o sistema exibirá uma janela de erro crítico com o protocolo de escolta armada e escreverá “BLOQUEADO - AGUARDANDO ESCOLTA” em vermelho na célula B6.
🛠️ Prática Obrigatória 2: Diálogo de Confirmação com vbYesNo
Passo 1: Construindo a Rotina de Zeramento Seguro
No Módulo 1, adicione uma rotina para limpar as cotações, exigindo confirmação explícita para evitar perda acidental de dados:
Passo 2: Vinculando a um Botão Secundário
Desenhe o botão 🔄 RESETAR FORMULÁRIO na célula D5 e atribua a macro LimparCotacoesComSeguranca.
📤 Instruções de Entrega (Microsoft Teams)
Após finalizar as duas práticas obrigatórias:
- Salve seu arquivo como Pasta de Trabalho Habilitada para Macro (.xlsm).
- Nome:
Atividade_18_SeuNome_SeuSobrenome.xlsm - No Microsoft Teams, acesse a equipe da disciplina > Tarefas.
- Envie o arquivo na tarefa “Capítulo 18 - Lógica com VBA I” e clique em Entregar.
💡 Checkpoint de Lógica: O Diagrama de Decisão Estruturada
Veja como o código que você escreveu se traduz exatamente no clássico grafo de fluxo de algoritmos de engenharia:
graph TD
Start([Início: AvaliarRiscoCarga]) --> Read[Ler Valor e Categoria da Célula]
Read --> Test{Valor >= 10000 OU<br/>Categoria == 'ELETRÔNICOS'?}
Test -- Verdadeiro (True) --> Critical[Exibe MsgBox vbCritical<br/>B6 = 'BLOQUEADO']
Test -- Falso (False) --> Normal[Exibe MsgBox vbInformation<br/>B6 = 'LIBERADO']
Critical --> Finish([Fim da Sub])
Normal --> Finish
style Test fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
style Critical fill:#e74c3c,stroke:#fff,stroke-width:2px,color:#fff
style Normal fill:#217346,stroke:#fff,stroke-width:2px,color:#fff🔥 Desafio de Fixação: Classificação com Select Case
Crie uma nova Sub ClassificarVeiculo() que leia o peso da carga em quilogramas (ex: célula B3) e utilize a estrutura Select Case para classificar automaticamente a categoria do veículo necessário na célula B4:
- De
1até1.500 kg:"Veículo Urbano de Carga (VUC)" - De
1.501até6.000 kg:"Caminhão Toco" - De
6.001até14.000 kg:"Caminhão Truck" - Acima de
14.000 kg:"Carreta / Articulado"
🔑 Gabarito do Desafio
📝 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 foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.
- Qual a diferença entre um procedimento Sub e uma Function em VBA?
- Para que serve a palavra-chave Dim e o que é uma variável?
- Por que é considerada boa prática usar Option Explicit no início de um módulo?
- Cite pelo menos quatro tipos de dados VBA e para que cada um é usado.
- Qual a diferença entre a estrutura If…ElseIf…Else e a estrutura Select Case?
- O que faz a função MsgBox e como capturamos a resposta do usuário (ex: vbYes/vbNo)?
- Para que serve a função InputBox?
- Como funciona a depuração passo a passo usando a tecla F8?
- Escreva um pequeno trecho de código VBA que declare uma variável do tipo Double e atribua um valor a ela.
- Qual a diferença entre os operadores lógicos And, Or e Not em VBA?