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:

  1. O que é a linguagem VBA e como ela se comunica com o Excel.
  2. O Modelo de Objetos do Excel (Application, Workbook, Worksheet, Range).
  3. A diferença crucial entre Objetos, Propriedades e Métodos.
  4. Como habilitar e utilizar o Gravador de Macros e o ambiente de desenvolvimento VBE (Visual Basic Editor).
  5. 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:#fff

2. 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:

  1. Application: Representa a instância inteira do programa Microsoft Excel em execução.
  2. Workbook / Workbooks: Representa o arquivo aberto (a Pasta de Trabalho, ex: Relatorio_Maio.xlsm).
  3. Worksheet / Worksheets: Representa as abas ou folhas de cálculo dentro daquele arquivo (ex: Planilha1, Estoque).
  4. Range / Cells: Representa a menor unidade de trabalho: uma célula isolada (Range("A1")) ou um bloco (Range("A1:C10")).

ThisWorkbook vs ActiveWorkbook
ThisWorkbook 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:

ConceitoO que representa?Pergunta de ApoioExemplo no Mundo RealExemplo em VBA
ObjetoO elemento que você quer manipular.O quê?Um CarroRange("A1")
PropriedadeUma característica ou estado do objeto.Como ele é?Carro.Cor = "Azul"Range("A1").Value = 500
Range("A1").Font.Bold = True
MétodoUma ação ou comando que o objeto sabe executar.O que ele faz?Carro.Acelerar()Range("A1").ClearContents
Worksheets("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 Select e Selection), 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 + F11 no 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.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
┌─────────────────────────────────────────────────────────────┐
│ Microsoft Visual Basic for Applications - Gestao_Logistica   │
├───────────────────┬─────────────────────────────────────────┤
│ Projeto - VBA     │ Módulo 1 (Código)                       │
│ ├─ Pasta1.xlsm    │ ┌─────────────────────────────────────┐ │
│ │  ├─ Planilha1   │ │ Sub FormatarRelatorio()             │ │
│ │  └─ EstaPasta   │ │     Range("A1:C1").Font.Bold = True │ │
│ └─ Módulos        │ │     Range("A1:C1").Interior.Color = │ │
│    └─ Módulo1 ────┼─┤         RGB(33, 115, 70)            │ │
│                   │ │ End Sub                             │ │
│                   │ └─────────────────────────────────────┘ │
└───────────────────┴─────────────────────────────────────────┘

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

  1. Abra uma nova pasta de trabalho e salve imediatamente como: Pasta de Trabalho Habilitada para Macro (.xlsm).
  2. 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.
  3. Vá na guia Desenvolvedor e clique em Gravar Macro.
  4. 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á).
  5. 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.
  6. Vá na guia Desenvolvedor e clique em Parar Gravação.

✅ Resultado Esperado (Exemplo)

  1. Apague o conteúdo e retire a cor da célula A1.
  2. Pressione Alt + F8 (menu de Macros), selecione MeuPrimeiroRobo e clique em Executar.
  3. Em menos de um segundo, o texto reaparecerá perfeitamente formatado.

🔑 Gabarito do Código Gerado no VBE (Alt + F11)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Sub MeuPrimeiroRobo()
    ' Ações gravadas pelo Excel:
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "CENTRAL LOGÍSTICA FASTLOG"
    Range("A1").Font.Bold = True
    With Selection.Interior
        .Pattern = xlSolid
        .Color = 65535 ' Código numérico da cor Amarela
    End With
End Sub

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 a Range("A1").Value = "...".
  • With Selection.Interior ... End With é um atalho para não repetir Selection.Interior em cada linha: tudo que começa com . dentro do bloco (.Pattern, .Color) se refere automaticamente ao objeto declarado no With.

🛠️ 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:

ABCD
1ID_CargaDestinoPeso_KgValor_Frete
2FL-1001Campinas - SP12501850
3FL-1002Curitiba - PR34004200
4FL-1003Belo Horizonte - MG8901200

Passo 2: Gravando o Script de Padronização

  1. Vá na guia Desenvolvedor > clique em Gravar Macro.
  2. Nome da Macro: FormatarRelatorioERP.
  3. 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.
  4. Vá em Desenvolvedor > Parar Gravação.

Passo 3: Vinculando a Macro a um Botão de Interface (UI)

  1. Vá na guia Inserir > grupo Ilustrações > Formas > escolha Retângulo com Cantos Arredondados.
  2. Desenhe o botão na lateral da planilha (ex: coluna F).
  3. Digite dentro dele: ⚡ FORMATAR RELATÓRIO.
  4. Clique com o botão direito sobre a forma desenhada e selecione Atribuir Macro….
  5. Escolha FormatarRelatorioERP e clique em OK.

✅ Resultado Esperado (Prática 1)

ABCDF
1ID_CargaDestinoPeso_KgValor_Frete[ ⚡ FORMATAR RELATÓRIO ]
2FL-1001Campinas - SP1250R$ 1.850,00
3FL-1002Curitiba - PR3400R$ 4.200,00
4FL-1003Belo Horizonte - MG890R$ 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: (Digite FL-9090)
  • A4: Motorista Designado: | B4: (Digite Carlos Eduardo)
  • A5: Valor Estimado: | B5: (Digite 2500)

Passo 2: Gravando a Limpeza dos Campos

  1. Vá em Desenvolvedor > Gravar Macro. Nome: LimparFormulario.
  2. Selecione as células de entrada de dados (B3:B5).
  3. Pressione a tecla Delete no teclado (os valores sumirão).
  4. Clique na célula B3 (para que o foco de digitação volte ao primeiro campo).
  5. Clique em Parar Gravação.

Passo 3: Criando o Botão de Limpeza

  1. Desenhe uma nova forma retangular na célula B7 com o texto: 🗑️ NOVO CADASTRO.
  2. Atribua a macro LimparFormulario a 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:

  1. 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!
  2. Nome padrão do arquivo: Atividade_17_SeuNome_SeuSobrenome.xlsm
  3. Acesse a equipe da sua turma no Microsoft Teams > guia Tarefas.
  4. Abra a tarefa “Capítulo 17 - Introdução às Macros e VBA”.
  5. Faça o upload do arquivo .xlsm e 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.

  1. 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.
  2. 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)

1
2
3
4
5
6
Sub ExportarPDF()
    Range("A1:D4").ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ThisWorkbook.Path & "\Relatorio_Cargas.pdf", _
        Quality:=xlQualityStandard
    MsgBox "Relatório exportado em PDF com sucesso!", vbInformation
End Sub

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.

  1. O que é uma Macro e em qual linguagem ela é escrita no Excel?
  2. Descreva a hierarquia do Modelo de Objetos do Excel (Application > Workbook > Worksheet > Range).
  3. Qual a diferença entre um Objeto, uma Propriedade e um Método em VBA?
  4. Qual o atalho de teclado para abrir o Editor VBA (VBE)?
  5. Quais são as vantagens e limitações do Gravador de Macros?
  6. Por que é obrigatório salvar um arquivo com macros no formato .xlsm em vez de .xlsx?
  7. O que acontece se você tentar salvar um arquivo com código VBA como .xlsx?
  8. Como vincular uma macro gravada a um botão na planilha?
  9. Dê um exemplo da sintaxe “Objeto.Propriedade = Valor” e outro de “Objeto.Método”.
  10. Por que é importante clicar em “Habilitar Conteúdo” ao abrir um arquivo .xlsm de fonte confiável?