Capítulo 13: Interface Gráfica Corporativa: Construção de UserForms
🎯 Objetivo da Aula
Nesta aula, você dará um salto definitivo de qualidade visual em suas automações criando Formulários Gráficos Personalizados (UserForms) no VBA. Você aprenderá a desenhar janelas de diálogo com controles da Caixa de Ferramentas (Rótulos / Labels, Caixas de Texto / TextBoxes e Botões de Comando / CommandButtons), configurar a ordem de navegação pelo teclado (TabIndex), manipular os estados do formulário (.Show, Unload Me) e transferir os dados da janela diretamente para a base do Excel.
Ao final desta aula, você terá desenvolvido a tela gráfica oficial de triagem e pesagem da portaria da FastLog S.A.
🏢 Cenário Prático (FastLog S.A.)
Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: Na guarita de entrada do Centro de Distribuição, os operadores de balança registravam os caminhões digitando diretamente nas células da planilha do Excel. Diariamente ocorriam incidentes graves: um operador com luvas de segurança esbarrava na tecla Delete e apagava o cabeçalho; outro digitava o peso da carreta na coluna errada, corrompendo a pesagem líquida. A diretoria de TI proibiu o acesso direto do operador às células da planilha.
Sua Missão: Desenvolver o formulário gráfico frmEntradaCargas, que surge centralizado na tela sobrepondo o Excel. O operador digita o manifesto, a placa e o peso nos campos gráficos; ao clicar no botão “Registrar Entrada”, o robô valida os dados, grava na primeira linha livre da planilha no plano de fundo e limpa a tela para o próximo caminhão com foco automático do cursor.
🧠 Fundamentos: A Teoria Traduzida
1. O que é um UserForm?
Um UserForm é uma janela gráfica padrão do Windows (caixa de diálogo modal) desenhada dentro do próprio VBE. Ele funciona como uma camada de proteção (Front-End), isolando o operador das planilhas (Back-End):
flowchart TD
USER["👤 Operador da Guarita"] <--> FORM["🖥️ UserForm Gráfico (frmEntradaCargas)<br/>Campos de Texto + Botão Salvar"]
FORM -- "Validações e Gravação Transacional" --> PLAN["📊 Planilha Excel (Base Oculta / Protegida)<br/>Nenhum toque manual direto nas células!"]
style USER fill:#2c3e50,stroke:#fff,stroke-width:2px,color:#fff
style FORM fill:#1a365d,stroke:#fff,stroke-width:2px,color:#fff
style PLAN fill:#217346,stroke:#fff,stroke-width:2px,color:#fff2. A Caixa de Ferramentas (Toolbox) e Seus Controles
| Controle | Nome no VBA | Prefixo Recomendado | Finalidade |
|---|---|---|---|
| Rótulo | Label | lbl (ex: lblPlaca) | Exibe textos informativos fixos e títulos na janela. |
| Caixa de Texto | TextBox | txt (ex: txtPlaca) | Campo onde o operador digita texto ou números. |
| Botão de Comando | CommandButton | cmd ou btn (ex: cmdSalvar) | Botão clicável que dispara procedimentos de código. |
| Moldura | Frame | fra (ex: fraDados) | Agrupa visualmente controles relacionados. |
3. Ciclo de Vida do UserForm
UserForm.Show: Carrega e exibe o formulário na tela do computador.UserForm.Hide: Oculta visualmente a janela, mantendo seus dados na memória RAM.Unload Me: Fecha a janela e remove completamente o formulário da memória RAM.
📖 Exemplo Guiado: Passo a Passo no Laboratório
No Excel, abra o VBE com o atalho Alt + F11.
Passo 1: Inserção do Formulário Gráfico
- No menu superior do VBE, clique em Inserir ➔ UserForm.
- Uma janela cinza de desenho e uma paleta flutuante chamada Caixa de ferramentas (Toolbox) surgirão na tela!
- Na Janela de Propriedades (
F4), configure as seguintes propriedades do formulário:(Name):frmEntradaCargasCaption:FastLog S.A. - Controle de Entrada na BalançaBackColor:&H00F0F0F0&(Cinza claro corporativo)Width:340Height:260
🛠️ Prática Obrigatória 1: Desenho e Configuração dos Controles
Agora você desenhará os campos de digitação na janela utilizando a Caixa de Ferramentas.
Passo a Passo no Computador:
- Inserção dos Rótulos (Labels):
- Clique na ferramenta Rótulo (
A) na Toolbox e desenhe 3 rótulos no formulário:lbl1:Caption="Placa do Veículo:"| Top: 20, Left: 20lbl2:Caption="Nome do Condutor:"| Top: 60, Left: 20lbl3:Caption="Peso de Entrada (Kg):"| Top: 100, Left: 20
- Clique na ferramenta Rótulo (
- Inserção das Caixas de Texto (TextBoxes):
- Clique na ferramenta Caixa de texto (
ab|) e desenhe ao lado de cada rótulo:- Campo 1:
(Name)=txtPlaca| Top: 18, Left: 140, Width: 150 - Campo 2:
(Name)=txtMotorista| Top: 58, Left: 140, Width: 150 - Campo 3:
(Name)=txtPeso| Top: 98, Left: 140, Width: 150
- Campo 1:
- Clique na ferramenta Caixa de texto (
- Inserção dos Botões de Comando (CommandButtons):
- Clique na ferramenta Botão de comando:
- Botão 1:
(Name)=cmdGravar|Caption="💾 Gravar Entrada"| Top: 160, Left: 40, Width: 110, Height: 30 - Botão 2:
(Name)=cmdFechar|Caption="❌ Sair"| Top: 160, Left: 180, Width: 110, Height: 30
- Botão 1:
- Clique na ferramenta Botão de comando:
- Configuração da Ordem do Teclado (
TabIndex):txtPlaca:TabIndex = 0txtMotorista:TabIndex = 1txtPeso:TabIndex = 2cmdGravar:TabIndex = 3cmdFechar:TabIndex = 4(Ao teclarTab, o cursor pulará suavemente de campo em campo!).
🛠️ Prática Obrigatória 2: Codificação dos Eventos e Persistência na Base
Agora programaremos os eventos de clique dos botões para gravar na base e fechar a janela.
Passo a Passo no Computador:
Dê um duplo clique sobre o botão
cmdFecharno formulário. O VBE abrirá a tela de código do UserForm.Digite a instrução de fechamento:
Volte ao desenho do formulário (duplo clique em
frmEntradaCargasno Project Explorer) e dê um duplo clique sobre o botãocmdGravar.Digite o código de persistência transacional com validação:
Criação da Macro de Abertura:
- No menu superior, clique em Inserir ➔ Módulo.
- Digite a macro pública de chamada:
Teste Completo no Excel:
- Alterne para o Excel. Crie os cabeçalhos na linha 1 da primeira aba:
- A1:
ID| B1:Placa| C1:Motorista| D1:Peso_Entrada| E1:Data_Hora_Balanca
- A1:
- Execute a macro
AbrirTelaBalanca(Alt + F8). - A janela gráfica surgirá flutuando sobre o Excel!
- Digite os dados de teste (ex:
BRA-2E19,Carlos Eduardo,24500) e clique em Gravar Entrada. - Veja os dados serem gravados na linha 2 da planilha e os campos ficarem limpos aguardando o próximo caminhão!
- Alterne para o Excel. Crie os cabeçalhos na linha 1 da primeira aba:
✅ Resultado Esperado (Prática 2):
A janela do UserForm opera como um software profissional independente, blindando a planilha contra cliques indevidos e garantindo agilidade ao operador.
📤 Instruções de Entrega (Microsoft Teams)
- Salve sua pasta de trabalho com macros (
.xlsm). - Nomeie o arquivo como:
Atividade_13_VBA_SeuNome_SeuSobrenome.xlsm. - Acesse a plataforma Microsoft Teams.
- Abra a tarefa: “VBA - Cap 13: Interfaces Gráficas com UserForms”.
- Anexe o arquivo e entregue.
💡 Checkpoint de Gestão & TI
No design de interfaces homem-máquina (UI/UX corporativo), o uso de formulários gráficos reduz drasticamente o índice de chamados ao suporte de TI. Quando o usuário digita diretamente em células da planilha, ele está exposto a apagar macros, deletar colunas ou desalinhar fórmulas. Ao encapsular o processo em um UserForm com validações no evento Click, a empresa garante governança estrita na entrada de dados.
🔥 Desafio de Fixação: Inicialização Automática e Bloqueio de Fechamento
Incremente o UserForm:
- No evento
UserForm_Initialize, adicione o preenchimento automático da data no título da janela: - Adicione formatação de borda plana moderna (
SpecialEffect = fmSpecialEffectFlat) em todas as caixas de texto.
📝 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.
- O que é um UserForm no VBA e por que ele é mais seguro do que permitir ao operador digitar diretamente nas células?
- Quais são os três controles visuais mais comuns da Caixa de Ferramentas (Toolbox) e qual é a utilidade de cada um?
- O que a propriedade
TabIndexconfigura nos controles de um formulário gráfico? - Qual é a diferença entre os comandos
UserForm.HideeUnload Me? - Qual comando é utilizado no código para exibir uma janela de formulário na tela do Excel?
- O que o método
.SetFocusfaz e por que ele melhora a usabilidade para o operador de pesagem? - Como a função
IsNumeric()foi utilizada para impedir que o usuário digite letras no campo de peso da balança? - Qual evento do UserForm é disparado automaticamente assim que a janela é carregada na memória RAM?
- Como associamos a exibição do UserForm a um botão retangular desenhado na planilha do Excel?
- O que significa a palavra-chave
Mequando utilizada no código interno de um formulário?