Capítulo 04: Interação com o Usuário e Sanitização de Strings
🎯 Objetivo da Aula
Nesta aula, você aprenderá a construir interfaces de diálogo interativas com o usuário utilizando as caixas nativas InputBox e MsgBox (com captura de respostas vbYesNo). Além disso, dominará a biblioteca essencial de tratamento e higienização de textos (Strings) no VBA (Trim, UCase, LCase, Left, Right, Mid, InStr, Len, Replace), blindando os cadastros corporativos contra erros de digitação e inconsistências de banco de dados.
Ao final deste capítulo, você terá construído o assistente oficial de cadastro e validação de motoristas da FastLog S.A.
🏢 Cenário Prático (FastLog S.A.)
Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: No Centro de Distribuição (CD), a recepção cadastra dezenas de motoristas autônomos por turno. Por pressa, os recepcionistas digitam nomes com espaços excessivos no início e no fim (" Carlos Silva "), placas de veículos em letras minúsculas sem traço ("abc1d23") e documentos com formatação inconsistente. Quando o sistema tenta integrar esses dados com a Polícia Rodoviária Federal e a seguradora de cargas via webservice, os cadastros são rejeitados, travando os caminhões na balança de pesagem por horas.
Sua Missão: Desenvolver o módulo CadastrarMotorista, que coleta os dados via caixas de diálogo interativas, remove espaços indesejados, converte textos para caixa alta padrão, valida o formato da placa veicular e solicita confirmação de gravação ao operador com botões corporativos Sim / Não.
🧠 Fundamentos: A Teoria Traduzida
1. Diálogos Interativos: InputBox e MsgBox
O VBA disponibiliza duas funções fundamentais para comunicação bidirecional com quem opera a planilha:
flowchart TD
SUB["Rotina VBA"] --> IB["📥 InputBox('Digite a Placa:', 'Cadastro')<br/>Coleta texto digitado pelo usuário"]
IB --> PROC["⚙️ Sanitização e Tratamento de String<br/>Trim, UCase, Replace, InStr"]
PROC --> MB{"❓ MsgBox('Confirma gravação?', vbYesNo)<br/>Captura resposta do usuário"}
MB -- vbYes --> GRAVA["💾 Grava na Linha da Planilha"]
MB -- vbNo --> CANCELA["🚫 Cancela Operação sem Alterar Dados"]
style SUB fill:#1a365d,stroke:#fff,stroke-width:2px,color:#fff
style IB fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style PROC fill:#f39c12,stroke:#fff,stroke-width:2px,color:#fff
style MB fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
style GRAVA fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff
style CANCELA fill:#c0392b,stroke:#fff,stroke-width:2px,color:#fffInputBox: Abre uma janela solicitando que o usuário digite um valor.MsgBoxcom Retorno: Para capturar o clique do operador, usamos parênteses e atribuímos a uma variável do tipoVbMsgBoxResult:
2. A Biblioteca de Higienização de Strings do VBA
| Função | O que ela faz? | Exemplo Prático | Retorno Obtido |
|---|---|---|---|
Trim(texto) | Remove espaços inúteis no início e no final | Trim(" FastLog ") | "FastLog" |
UCase(texto) | Converte todas as letras para MAIÚSCULAS | UCase("scania r450") | "SCANIA R450" |
LCase(texto) | Converte todas as letras para minúsculas | LCase("CONTATO@FASTLOG.COM") | "contato@fastlog.com" |
Len(texto) | Retorna o comprimento (número de caracteres) | Len("BRA2E19") | 7 |
Left(texto, n) | Extrai os primeiros n caracteres à esquerda | Left("BRA2E19", 3) | "BRA" |
Right(texto, n) | Extrai os últimos n caracteres à direita | Right("SP-CAMPINAS", 8) | "CAMPINAS" |
Mid(texto, ini, n) | Extrai n caracteres a partir da posição ini | Mid("11988887777", 3, 5) | "98888" |
InStr(texto, busca) | Procura a posição onde uma palavra ou caractere surge | InStr("user@fastlog.com", "@") | 5 |
Replace(texto, de, para) | Substitui ocorrências de um caractere por outro | Replace("123.456.789-00", ".", "") | "123456789-00" |
📖 Exemplo Guiado: Passo a Passo no Laboratório
No Excel, abra o VBE com Alt + F11.
Passo 1: Inserção do Módulo de Tratamento de Dados
- No menu superior, clique em Inserir ➔ Módulo.
- Na janela de propriedades (
F4), renomeie o módulo para:modCadastroMotoristas. - Verifique se o
Option Explicitestá presente na primeira linha.
Passo 2: Teste Rápido de Sanitização na Janela Imediata
Pressione Ctrl + G e digite a instrução de teste:
Pressione Enter. O VBE retornará imediatamente:
🛠️ Prática Obrigatória 1: Assistente Interativo de Cadastro com InputBox
Desenvolveremos a rotina que solicita o nome, a placa do caminhão e a CNH do motorista, sanitizando cada campo antes de gravar na primeira linha vazia da planilha.
Passo a Passo no Computador:
No módulo
modCadastroMotoristas, digite o seguinte código:Preparação dos Cabeçalhos na Planilha:
- Na linha 1 da primeira planilha, certifique-se de ter os cabeçalhos:
- A1:
ID| B1:Nome_Motorista| C1:Placa_Veiculo| D1:CNH| E1:Data_Hora_Registro
- A1:
- Na linha 1 da primeira planilha, certifique-se de ter os cabeçalhos:
Teste Prático:
- Pressione
F5no VBE para rodar a macro. - Quando o
InputBoxpedir o nome, digite intencionalmente com erros:" marcos aurelio fonseca ". - Quando pedir a placa, digite:
" bra-2e19 ". - Digite a CNH:
"12345678900". - Veja o resultado gravado na planilha perfeitamente padronizado!
- Pressione
✅ Resultado Esperado (Prática 1):
A planilha recebe na linha 2:
- ID:
1 - Nome:
MARCOS AURELIO FONSECA - Placa:
BRA2E19 - CNH:
12345678900 - Data/Hora: Data e hora exatas do registro.
🛠️ Prática Obrigatória 2: Validação de Placa e Confirmação com MsgBox(vbYesNo)
Agora adicionaremos uma camada de validação inteligente: verificaremos se a placa possui exatamente 7 caracteres (padrão Brasil/Mercosul) e exigiremos confirmação do operador antes de persistir os dados na planilha.
Passo a Passo no Computador:
- No mesmo módulo, atualize o procedimento adicionando o bloco de validação e confirmação:
- Execute a macro com
F5:- Teste digitar uma placa com tamanho inválido (
"ABC12"). O sistema deve travar e exibir o alerta vermelhovbCritical. - Teste com uma placa válida de 7 caracteres (
"RIO2A18"). O sistema apresentará a caixa de confirmação com resumo dos dados e botões Sim e Não. - Ao clicar em Não, nada é gravado. Ao clicar em Sim, a linha é preenchida!
- Teste digitar uma placa com tamanho inválido (
✅ Resultado Esperado (Prática 2):
O operador é guiado por uma interface amigável, prevenindo inserções incompletas e confirmando os dados antes de gravar.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_04_VBA_SeuNome_SeuSobrenome.xlsm. - Acesse a plataforma Microsoft Teams.
- Abra a tarefa: “VBA - Cap 04: Sanitização de Strings e Diálogos”.
- Anexe o arquivo
.xlsme envie.
💡 Checkpoint de Gestão & TI
Em arquitetura de TI corporativa, vigora o axioma GIGO (Garbage In, Garbage Out): se dados inválidos entrarem no sistema, relatórios gerenciais e inteligência artificial produzirão resultados corrompidos. Ao implementar sanitização na camada de interface com funções como Trim, Replace e validações de tamanho com Len, o desenvolvedor garante a integridade dos dados na origem, poupando custos exorbitantes de saneamento de dados na TI central.
🔥 Desafio de Fixação: Máscara Automática de Placa e Validação de E-mail
Incremente a rotina com mais duas sanitizações profissionais:
- Se a placa digitada possuir o padrão antigo (3 letras seguidas de 4 números), formate-a com o hífen oficial no meio utilizando as funções
LefteRight: - Adicione a coleta do e-mail do motorista e valide se ele contém o caractere
@utilizando a funçãoInStr:
📝 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 é a principal diferença entre a função
InputBoxe a funçãoMsgBoxno VBA? - Como fazemos para capturar o botão exato clicado pelo usuário em uma caixa de mensagem configurada com
vbYesNo? - O que a função
Trimfaz com uma string e por que ela é indispensável em formulários corporativos? - Qual é a utilidade prática das funções
UCaseeLCasena padronização de cadastros de clientes e motoristas? - O que a função
Lenretorna e como ela foi usada no laboratório para validar a placa veicular? - Explique o funcionamento da função
Replacee cite um exemplo em que ela remove caracteres indesejados. - Para que serve a função
Mid(texto, inicio, tamanho)e como ela difere das funçõesLefteRight? - Qual valor a função
InStrretorna quando o caractere pesquisado (por exemplo,@) não é encontrado dentro da string? - O que representa a constante de sistema
vbCrLfna montagem de mensagens formatadas na caixa de diálogo? - O que significa o conceito de TI “Garbage In, Garbage Out” (GIGO) e de que forma a sanitização de strings previne problemas na empresa?