Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Escrevendo Seu Primeiro Procedimento VBA | Introdução ao VBA e ao Modelo de Objetos do Excel
VBA do Excel para Automação Empresarial

Escrevendo Seu Primeiro Procedimento VBA

Deslize para mostrar o menu

Gravar macros ensina o vocabulário; escrever uma do zero é onde você começa a pensar como um programador.

A Anatomia de um Sub Procedure

Todo bloco reutilizável de código VBA que executa uma ação (em vez de retornar um valor, que seria uma Function) é escrito como um Sub:

Sub ProcedureName()
    ' instructions go here
End Sub

Com o cursor em qualquer lugar dentro de um Sub, pressione F5 (ou clique na seta verde Executar) para executá-lo. Comentários — qualquer linha iniciada com um apóstrofo (') — são completamente ignorados pelo VBA; use-os generosamente para explicar por que o código faz algo, não apenas o que ele faz, já que o que geralmente é óbvio ao ler o próprio código.

Hábitos de Formatação que Compensam Imediatamente

  • Digite Option Explicit no topo de todo módulo — isso obriga você a declarar todas as variáveis, evitando erros de digitação antes que se tornem bugs;
  • Indente o código dentro de loops e blocos If com um Tab — o VBE não exige isso, mas código sem indentação se torna ilegível rapidamente;
  • Use nomes descritivos (HighEarnerCount, e não x) — você vai agradecer a si mesmo daqui a três semanas.

Exemplo Prático: Destacando Altos Salários

Vamos escrever, manualmente, um procedimento que percorre cada funcionário na tabela e destaca quem ganha mais de $55,000 — algo que o gravador de macros nunca conseguiria fazer, pois exige uma decisão (um comando If) repetida para cada linha (um loop).

Option Explicit
 
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long
 
    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
 
    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i
 
    MsgBox "Done — high earners are highlighted."
End Sub
Explicação linha por linha
expand arrow
  • Dim ws As Worksheet / Dim i As Long — estas linhas declaram duas variáveis: ws armazenará uma referência à planilha Employees, e i será usada para contar as linhas;
  • Set ws = ThisWorkbook.Worksheets("Employees") — este é o hábito do modelo de objetos: nomear a planilha explicitamente em vez de depender da que estiver ativa;
  • ws.Cells(ws.Rows.Count, 1).End(xlUp).Row — um padrão comum para encontrar a última linha usada na coluna A, independentemente de quantos funcionários estejam na tabela;
  • For i = 2 To lastRow ... Next i — um loop que repete o código para cada linha de dados, começando na linha 2 para pular o cabeçalho;
  • If ws.Cells(i, 6).Value > 55000 Then — uma decisão: apenas as linhas em que a coluna Salary (coluna 6) excede 55000 serão formatadas;
  • MsgBox — um pop-up simples confirmando que a macro foi concluída.

Digite este procedimento em modIntro, coloque o cursor dentro dele e pressione F5. Verifique os números você mesmo — Emma Davis e Olivia Brown são as duas funcionárias que recebem mais de $55.000 na tabela de exemplo.

Tarefa

  1. Digite HighlightTopEarners exatamente como mostrado em modIntro e execute-o. Confirme que duas linhas ficam verdes.
  2. Duplique o procedimento como HighlightITDepartment e altere a condição para destacar qualquer linha em que o Departamento (coluna 3) seja igual a "IT" em vez de verificar o Salário.
  3. Adicione um comentário acima de cada procedimento explicando, em uma frase, o que ele faz — pratique escrever comentários para o leitor, não para você mesmo.
  4. Salve a planilha novamente (ainda está em .xlsm, então um simples Ctrl+S é suficiente).
Dica
expand arrow
  1. Selecione todo o procedimento HighlightTopEarners (de Sub até End Sub), copie e cole logo abaixo dele mesmo em modIntro.
  2. Renomeie a linha Sub da segunda cópia para Sub HighlightITDepartment() — cada procedimento em um módulo precisa de um nome único, senão o VBA não saberá qual executar.
  3. A condição a ser alterada é a linha If. Atualmente, ela verifica um número:
If ws.Cells(i, 6).Value > 55000 Then

Agora, é necessário verificar um texto — coluna 3 (Department) igual a "IT". Lembre-se do Capítulo 2 que comparações de texto precisam de aspas ao redor do valor a ser comparado e utilize = em vez de >. 4. Todo o restante dentro do loop (a linha Interior.Color, a estrutura do loop) pode permanecer igual — apenas a condição testada muda.

Adicionando Comentários

  1. Uma linha de comentário começa com um apóstrofo (') e fica em uma linha própria diretamente acima da linha Sub — não dentro do procedimento.
  2. Escreva como se estivesse explicando a macro para um colega que nunca a viu, não como um lembrete para você mesmo. Compare:
    • Pouco útil: ' loops through rows (descreve como, o que o código já mostra)
    • Mais útil: ' Highlights employees earning over $55,000 (descreve o que realiza, o que não é óbvio à primeira vista)
  3. Faça o mesmo para o segundo procedimento — uma frase descrevendo o que ele destaca e por quê, em termos do objetivo de negócio (funcionários do departamento de TI), não da mecânica do loop.
Solução
expand arrow
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — high earners are highlighted."
End Sub

' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 3).Value = "IT" Then
            ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — IT department is highlighted."
End Sub

Digite ambos em modIntro, execute primeiro o HighlightTopEarners e confirme que exatamente duas linhas ficam verdes (Emma Davis com $62.000 e Sophia Miller com $59.000 — os outros três estão em ou abaixo de $55.000), depois execute HighlightITDepartment e confirme que a linha de Sophia Miller é destacada. Salve com Ctrl+S quando ambos estiverem funcionando.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 6

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Escrevendo Seu Primeiro Procedimento VBA

Gravar macros ensina o vocabulário; escrever uma do zero é onde você começa a pensar como um programador.

A Anatomia de um Sub Procedure

Todo bloco reutilizável de código VBA que executa uma ação (em vez de retornar um valor, que seria uma Function) é escrito como um Sub:

Sub ProcedureName()
    ' instructions go here
End Sub

Com o cursor em qualquer lugar dentro de um Sub, pressione F5 (ou clique na seta verde Executar) para executá-lo. Comentários — qualquer linha iniciada com um apóstrofo (') — são completamente ignorados pelo VBA; use-os generosamente para explicar por que o código faz algo, não apenas o que ele faz, já que o que geralmente é óbvio ao ler o próprio código.

Hábitos de Formatação que Compensam Imediatamente

  • Digite Option Explicit no topo de todo módulo — isso obriga você a declarar todas as variáveis, evitando erros de digitação antes que se tornem bugs;
  • Indente o código dentro de loops e blocos If com um Tab — o VBE não exige isso, mas código sem indentação se torna ilegível rapidamente;
  • Use nomes descritivos (HighEarnerCount, e não x) — você vai agradecer a si mesmo daqui a três semanas.

Exemplo Prático: Destacando Altos Salários

Vamos escrever, manualmente, um procedimento que percorre cada funcionário na tabela e destaca quem ganha mais de $55,000 — algo que o gravador de macros nunca conseguiria fazer, pois exige uma decisão (um comando If) repetida para cada linha (um loop).

Option Explicit
 
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long
 
    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
 
    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i
 
    MsgBox "Done — high earners are highlighted."
End Sub
Explicação linha por linha
expand arrow
  • Dim ws As Worksheet / Dim i As Long — estas linhas declaram duas variáveis: ws armazenará uma referência à planilha Employees, e i será usada para contar as linhas;
  • Set ws = ThisWorkbook.Worksheets("Employees") — este é o hábito do modelo de objetos: nomear a planilha explicitamente em vez de depender da que estiver ativa;
  • ws.Cells(ws.Rows.Count, 1).End(xlUp).Row — um padrão comum para encontrar a última linha usada na coluna A, independentemente de quantos funcionários estejam na tabela;
  • For i = 2 To lastRow ... Next i — um loop que repete o código para cada linha de dados, começando na linha 2 para pular o cabeçalho;
  • If ws.Cells(i, 6).Value > 55000 Then — uma decisão: apenas as linhas em que a coluna Salary (coluna 6) excede 55000 serão formatadas;
  • MsgBox — um pop-up simples confirmando que a macro foi concluída.

Digite este procedimento em modIntro, coloque o cursor dentro dele e pressione F5. Verifique os números você mesmo — Emma Davis e Olivia Brown são as duas funcionárias que recebem mais de $55.000 na tabela de exemplo.

Tarefa

  1. Digite HighlightTopEarners exatamente como mostrado em modIntro e execute-o. Confirme que duas linhas ficam verdes.
  2. Duplique o procedimento como HighlightITDepartment e altere a condição para destacar qualquer linha em que o Departamento (coluna 3) seja igual a "IT" em vez de verificar o Salário.
  3. Adicione um comentário acima de cada procedimento explicando, em uma frase, o que ele faz — pratique escrever comentários para o leitor, não para você mesmo.
  4. Salve a planilha novamente (ainda está em .xlsm, então um simples Ctrl+S é suficiente).
Dica
expand arrow
  1. Selecione todo o procedimento HighlightTopEarners (de Sub até End Sub), copie e cole logo abaixo dele mesmo em modIntro.
  2. Renomeie a linha Sub da segunda cópia para Sub HighlightITDepartment() — cada procedimento em um módulo precisa de um nome único, senão o VBA não saberá qual executar.
  3. A condição a ser alterada é a linha If. Atualmente, ela verifica um número:
If ws.Cells(i, 6).Value > 55000 Then

Agora, é necessário verificar um texto — coluna 3 (Department) igual a "IT". Lembre-se do Capítulo 2 que comparações de texto precisam de aspas ao redor do valor a ser comparado e utilize = em vez de >. 4. Todo o restante dentro do loop (a linha Interior.Color, a estrutura do loop) pode permanecer igual — apenas a condição testada muda.

Adicionando Comentários

  1. Uma linha de comentário começa com um apóstrofo (') e fica em uma linha própria diretamente acima da linha Sub — não dentro do procedimento.
  2. Escreva como se estivesse explicando a macro para um colega que nunca a viu, não como um lembrete para você mesmo. Compare:
    • Pouco útil: ' loops through rows (descreve como, o que o código já mostra)
    • Mais útil: ' Highlights employees earning over $55,000 (descreve o que realiza, o que não é óbvio à primeira vista)
  3. Faça o mesmo para o segundo procedimento — uma frase descrevendo o que ele destaca e por quê, em termos do objetivo de negócio (funcionários do departamento de TI), não da mecânica do loop.
Solução
expand arrow
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — high earners are highlighted."
End Sub

' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 3).Value = "IT" Then
            ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — IT department is highlighted."
End Sub

Digite ambos em modIntro, execute primeiro o HighlightTopEarners e confirme que exatamente duas linhas ficam verdes (Emma Davis com $62.000 e Sophia Miller com $59.000 — os outros três estão em ou abaixo de $55.000), depois execute HighlightITDepartment e confirme que a linha de Sophia Miller é destacada. Salve com Ctrl+S quando ambos estiverem funcionando.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 6
some-alt