Capítulo 17: Introdução ao VBA e Gravador de Macros
🎯 Objetivo da Aula
Uma Macro é uma sequência automatizada de instruções escritas em VBA (Visual Basic for Applications), a linguagem de programação nativa do ecossistema Microsoft Office. Se você precisa formatar relatórios, validar dados ou consolidar informações repetitivamente todos os dias, o VBA permite transformar minutos (ou horas) de trabalho mecânico em um clique de fração de segundos.
Nesta aula, você aprenderá os pilares da automação no Excel:
- O que é a linguagem VBA e como ela se comunica com o Excel.
- O Modelo de Objetos do Excel (Application, Workbook, Worksheet, Range).
- A diferença crucial entre Objetos, Propriedades e Métodos.
- Como habilitar e utilizar o Gravador de Macros e o ambiente de desenvolvimento VBE (Visual Basic Editor).
- As diretrizes de segurança e a extensão essencial de arquivo
.xlsm.
🏢 O Cenário Prático (Seu Desafio)
Situação: Todos os dias, às 08h00, o sistema ERP da FastLog extrai um relatório bruto de fretes emitidos. O arquivo gerado é “cru”: sem cabeçalhos destacados, sem formatação de moedas, com colunas cortadas e sem bordas. Você gasta 15 a 20 minutos todas as manhãs realizando a mesma sequência manual de formatação e limpeza.
Missão: Construir um script de automação (Macro) que aplique padronização visual completa (cabeçalho corporativo, autoajuste de colunas e formatação numérica) com apenas um clique de botão, economizando horas de trabalho operacional.
🧠 Fundamentos: A Teoria da Linguagem VBA
1. O que é o VBA?
O VBA (Visual Basic for Applications) é uma linguagem de programação orientada a eventos e baseada em objetos, desenvolvida pela Microsoft. Diferente de uma fórmula de célula (que apenas calcula e devolve um valor naquela posição), o VBA possui poder executivo: ele pode criar arquivos, alterar cores, deletar linhas, abrir caixas de diálogo, conectar-se a bancos de dados externos e até enviar e-mails via Outlook.
graph TD
User["Ação do Usuário / Botão"] --> Engine["Interpretador VBA"]
Engine --> App["Application (Excel)"]
App --> WB["Workbooks (Pastas de Trabalho)"]
WB --> WS["Worksheets (Abas da Planilha)"]
WS --> Rng["Range / Cells (Células e Intervalos)"]
style Engine fill:#217346,stroke:#fff,stroke-width:2px,color:#fff
style Rng fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff2. O Modelo de Objetos do Excel (Excel Object Model)
O Excel é organizado em uma estrutura hierárquica rigorosa chamada Modelo de Objetos. Para manipular qualquer elemento na tela via código, precisamos navegar nessa árvore genealógica:
Application: Representa a instância inteira do programa Microsoft Excel em execução.Workbook/Workbooks: Representa o arquivo aberto (a Pasta de Trabalho, ex:Relatorio_Maio.xlsm).Worksheet/Worksheets: Representa as abas ou folhas de cálculo dentro daquele arquivo (ex:Planilha1,Estoque).Range/Cells: Representa a menor unidade de trabalho: uma célula isolada (Range("A1")) ou um bloco (Range("A1:C10")).
ThisWorkbook vs ActiveWorkbookThisWorkbook sempre se refere ao arquivo .xlsm onde o próprio código VBA está salvo — não muda mesmo que o usuário abra outras pastas de trabalho ao mesmo tempo. ActiveWorkbook (ou simplesmente Workbook sem especificar) se refere à pasta de trabalho que estiver na tela em primeiro plano no momento, que pode ser outra. Por segurança, este curso sempre usa ThisWorkbook quando quer garantir que o código atua no próprio arquivo da macro.
3. A Tríade da Programação em VBA: Objetos, Propriedades e Métodos
Para escrever ou ler qualquer linha de código em VBA, você deve dominar três conceitos fundamentais:
| Conceito | O que representa? | Pergunta de Apoio | Exemplo no Mundo Real | Exemplo em VBA |
|---|---|---|---|---|
| Objeto | O elemento que você quer manipular. | O quê? | Um Carro | Range("A1") |
| Propriedade | Uma característica ou estado do objeto. | Como ele é? | Carro.Cor = "Azul" | Range("A1").Value = 500Range("A1").Font.Bold = True |
| Método | Uma ação ou comando que o objeto sabe executar. | O que ele faz? | Carro.Acelerar() | Range("A1").ClearContentsWorksheets("Aba1").Delete |
A Sintaxe Universal do VBA:Objeto.Propriedade = Valor (Altera um estado)Objeto.Metodo (Executa uma ação)
A função RGB() e o objeto Selection
Cores no VBA são definidas pela função RGB(vermelho; verde; azul), onde cada componente vai de 0 a 255 (ex: RGB(33, 115, 70) é um verde escuro). Já Selection é um objeto especial que representa “o que estiver selecionado na tela agora” — diferente de Range("A1"), que sempre aponta para a mesma célula, Selection muda dependendo de onde o usuário clicou por último. O Gravador de Macros usa Selection com frequência porque ele grava literalmente o que você clicou.
4. O Gravador de Macros sob o Microscópio
O Gravador de Macros funciona como um “tradutor em tempo real”. Enquanto você clica nos menus, formata células e digita textos com o mouse e teclado, o motor do Excel escreve internamente as instruções correspondentes em VBA dentro de um Módulo.
- Vantagem: Excelente para descobrir o nome de objetos, propriedades e métodos desconhecidos.
- Limitação: O gravador registra tudo de forma estritamente literal (usando excessivamente
SelecteSelection), exigindo que o programador posteriormente refine o código para deixá-lo limpo, dinâmico e veloz.
5. O Ambiente de Desenvolvimento: VBE (Visual Basic Editor)
O Excel possui uma IDE completa embutida chamada VBE.
- Atalho Universal: Pressione
Alt + F11no teclado para abrir/fechar o editor de código. - Janela Project Explorer (
Ctrl + R): Mostra todos os arquivos abertos, suas abas (Planilha1,EstaPasta_de_trabalho) e os Módulos (onde os códigos das macros ficam armazenados). - Janela de Código: Área central onde o script é lido e editado.
6. Segurança e Extensões de Arquivo (.xlsx vs .xlsm)
Por motivos de segurança cibernética (prevenção contra vírus de macro), planilhas padrão salvas como .xlsx não salvam códigos VBA.
- Para manter suas macros ativas, salve o documento obrigatoriamente como: Pasta de Trabalho Habilitada para Macro do Excel (
.xlsm). - Ao abrir um arquivo
.xlsm, o Excel exibirá uma barra de alerta amarela: clique sempre em “Habilitar Conteúdo” para liberar a execução dos códigos.
📖 Exemplo Guiado: O Seu Primeiro Robô de Automação
Antes de formatar um relatório extenso, vamos criar uma macro simples que escreve e formata uma célula de identificação.
Passo a Passo
- Abra uma nova pasta de trabalho e salve imediatamente como: Pasta de Trabalho Habilitada para Macro (.xlsm).
- Habilite a Guia Desenvolvedor:
- Clique com o botão direito em qualquer lugar da faixa de opções superior > selecione Personalizar a Faixa de Opções.
- Na coluna da direita, marque a caixa de seleção Desenvolvedor e dê OK.
- Vá na guia Desenvolvedor e clique em Gravar Macro.
- Configure os parâmetros da gravação:
- Nome da macro:
MeuPrimeiroRobo(Sem espaços ou caracteres especiais). - Armazenar macro em: Esta pasta de trabalho.
- Clique em OK (A gravação começará).
- Nome da macro:
- Executando as ações gravadas:
- Clique na célula A1 e digite:
CENTRAL LOGÍSTICA FASTLOG. - Aplique Negrito e coloque o fundo da célula em Amarelo.
- Clique na célula A1 e digite:
- Vá na guia Desenvolvedor e clique em Parar Gravação.
✅ Resultado Esperado (Exemplo)
- Apague o conteúdo e retire a cor da célula A1.
- Pressione
Alt + F8(menu de Macros), selecioneMeuPrimeiroRoboe clique em Executar. - Em menos de um segundo, o texto reaparecerá perfeitamente formatado.
🔑 Gabarito do Código Gerado no VBE (Alt + F11)
Decifrando o código gravado
ActiveCell.FormulaR1C1 = "..."é apenas a forma que o Gravador usa para escrever texto na célula ativa — para textos simples, equivale aRange("A1").Value = "...".With Selection.Interior ... End Withé um atalho para não repetirSelection.Interiorem cada linha: tudo que começa com.dentro do bloco (.Pattern,.Color) se refere automaticamente ao objeto declarado noWith.
🛠️ Prática Obrigatória 1: Automatizador de Relatórios de ERP
Passo 1: Inserindo a Base Bruta Desformatada
Na Planilha 1, insira a seguinte matriz de dados nas células A1 até D4 sem aplicar nenhuma borda, cor ou negrito:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | ID_Carga | Destino | Peso_Kg | Valor_Frete |
| 2 | FL-1001 | Campinas - SP | 1250 | 1850 |
| 3 | FL-1002 | Curitiba - PR | 3400 | 4200 |
| 4 | FL-1003 | Belo Horizonte - MG | 890 | 1200 |
Passo 2: Gravando o Script de Padronização
- Vá na guia Desenvolvedor > clique em Gravar Macro.
- Nome da Macro:
FormatarRelatorioERP. - Execute ordenadamente a seguinte rotina de higienização:
- Selecione o cabeçalho (A1:D1), coloque em Negrito, fonte Branca e preenchimento Azul Escuro.
- Selecione a coluna D (D2:D4) e aplique a formatação de Moeda (R$).
- Selecione as colunas A, B, C e D e dê um duplo clique na divisória entre as letras das colunas para acionar o AutoAjuste de Largura.
- Clique na célula A1 para desmarcar a seleção.
- Vá em Desenvolvedor > Parar Gravação.
Passo 3: Vinculando a Macro a um Botão de Interface (UI)
- Vá na guia Inserir > grupo Ilustrações > Formas > escolha Retângulo com Cantos Arredondados.
- Desenhe o botão na lateral da planilha (ex: coluna F).
- Digite dentro dele: ⚡ FORMATAR RELATÓRIO.
- Clique com o botão direito sobre a forma desenhada e selecione Atribuir Macro….
- Escolha
FormatarRelatorioERPe clique em OK.
✅ Resultado Esperado (Prática 1)
| A | B | C | D | F | |
|---|---|---|---|---|---|
| 1 | ID_Carga | Destino | Peso_Kg | Valor_Frete | [ ⚡ FORMATAR RELATÓRIO ] |
| 2 | FL-1001 | Campinas - SP | 1250 | R$ 1.850,00 | |
| 3 | FL-1002 | Curitiba - PR | 3400 | R$ 4.200,00 | |
| 4 | FL-1003 | Belo Horizonte - MG | 890 | R$ 1.200,00 |
🛠️ Prática Obrigatória 2: Limpador Automático de Formulário de Entrada
Passo 1: Construindo a Interface de Coleta
Na Planilha 2 (renomeie a aba para Cadastro), estruture um formulário de preenchimento rápido:
- A1:
=== NOVO DESPACHO DE CARGA === - A3:
Código do Rastreio:| B3: (DigiteFL-9090) - A4:
Motorista Designado:| B4: (DigiteCarlos Eduardo) - A5:
Valor Estimado:| B5: (Digite2500)
Passo 2: Gravando a Limpeza dos Campos
- Vá em Desenvolvedor > Gravar Macro. Nome:
LimparFormulario. - Selecione as células de entrada de dados (B3:B5).
- Pressione a tecla Delete no teclado (os valores sumirão).
- Clique na célula B3 (para que o foco de digitação volte ao primeiro campo).
- Clique em Parar Gravação.
Passo 3: Criando o Botão de Limpeza
- Desenhe uma nova forma retangular na célula B7 com o texto: 🗑️ NOVO CADASTRO.
- Atribua a macro
LimparFormularioa esse botão.
✅ Resultado Esperado (Prática 2)
Toda vez que o operador terminar de registrar uma carga e clicar no botão, o formulário apagará instantaneamente os campos preenchidos e posicionará o cursor na primeira linha, pronto para a próxima digitação.
📤 Instruções de Entrega (Microsoft Teams)
Após finalizar as duas práticas obrigatórias no mesmo arquivo:
- Atenção Máxima: Salve o arquivo no formato Pasta de Trabalho Habilitada para Macro do Excel (.xlsm). Se salvar como
.xlsx, todos os seus códigos VBA serão apagados permanentemente! - Nome padrão do arquivo:
Atividade_17_SeuNome_SeuSobrenome.xlsm - Acesse a equipe da sua turma no Microsoft Teams > guia Tarefas.
- Abra a tarefa “Capítulo 17 - Introdução às Macros e VBA”.
- Faça o upload do arquivo
.xlsme clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de vivenciar o conceito de Scripts de Automação de Tarefas (Task Runners / Robotic Process Automation - RPA).
Em desenvolvimento de software moderno (seja em Python, Node.js ou Shell Script), tarefas repetitivas de tratamento de dados não são realizadas por humanos, mas sim delegadas a scripts autônomos. No Excel, o VBA atua como o seu primeiro bot, manipulando diretamente as propriedades dos objetos do sistema operacional.
sequenceDiagram
autonumber
actor Operador as Usuário (Operador)
participant UI as Botão na Planilha
participant VBA as Rotina VBA (Macro)
participant DOM as Objeto Range(A1:D4)
Operador->>UI: Clica no Botão "Formatar"
UI->>VBA: Dispara Evento Click (Chama Sub)
VBA->>DOM: Range.Font.Bold = True
VBA->>DOM: Range.Columns.AutoFit
DOM-->>Operador: Interface atualizada em milissegundos🔥 Desafio de Fixação: Botão de Impressão e PDF
Grave uma nova macro chamada ExportarPDF.
- Desafio: Durante a gravação da macro na Planilha 1, selecione a área da tabela (
A1:D4), acesse Arquivo > Salvar Como, mude o tipo de arquivo para PDF (*.pdf) e salve na pasta Documentos. - Pare a gravação e atribua essa macro a um botão verde chamado 📄 GERAR PDF.
🔑 Gabarito do Desafio (Visualização no VBE - Alt + F11)
Argumentos nomeados (Nome:=Valor)
Alguns métodos VBA aceitam vários parâmetros, e para deixar claro qual valor é qual, o VBA permite nomeá-los explicitamente com NomeDoArgumento:=Valor, em vez de depender só da ordem em que são digitados. Type:=xlTypePDF significa “o argumento Type recebe o valor xlTypePDF” — assim a linha de código fica legível mesmo quebrada em várias linhas com _. O caractere & usado em ThisWorkbook.Path & "\Relatorio_Cargas.pdf" apenas junta (concatena) dois textos, exatamente como aprendemos no Cap. 04.
📝 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.
- O que é uma Macro e em qual linguagem ela é escrita no Excel?
- Descreva a hierarquia do Modelo de Objetos do Excel (Application > Workbook > Worksheet > Range).
- Qual a diferença entre um Objeto, uma Propriedade e um Método em VBA?
- Qual o atalho de teclado para abrir o Editor VBA (VBE)?
- Quais são as vantagens e limitações do Gravador de Macros?
- Por que é obrigatório salvar um arquivo com macros no formato .xlsm em vez de .xlsx?
- O que acontece se você tentar salvar um arquivo com código VBA como .xlsx?
- Como vincular uma macro gravada a um botão na planilha?
- Dê um exemplo da sintaxe “Objeto.Propriedade = Valor” e outro de “Objeto.Método”.
- Por que é importante clicar em “Habilitar Conteúdo” ao abrir um arquivo .xlsm de fonte confiável?