Como usar eventos no VBA do Excel para criar planilhas reativas

Os eventos do VBA são procedimentos especiais que rodam automaticamente quando algo acontece na planilha — como Worksheet_Change (célula alterada), Worksheet_SelectionChange (mudança de seleção) ou Workbook_Open (arquivo aberto) —, acessados com duplo clique no nome da aba ou em ThisWorkbook no editor VBA (Alt+F11).

Imagina uma planilha que age sozinha: quando você muda o valor de uma célula, outra célula é atualizada automaticamente. Quando você seleciona uma aba, uma ação é executada. Quando você abre o arquivo, uma macro roda. Tudo isso é possível com os eventos do VBA, que são um dos recursos mais poderosos e menos explorados por quem trabalha com macros. Neste artigo iremos mostrar como usar os principais eventos do VBA no Excel.

O que são eventos no VBA?

Eventos são ações que o usuário realiza no Excel que o VBA consegue capturar e responder automaticamente. Quando o usuário muda o valor de uma célula, isso é um evento. Quando ele seleciona uma planilha, isso é outro evento. Quando ele abre o arquivo, isso também é um evento.

Como criar um procedimento de evento

Os eventos ficam em módulos especiais, não no módulo padrão. Para criar um evento de planilha, clique duas vezes no nome da planilha no painel do projeto VBA (Alt+F11) e escolha o objeto e o evento no topo do editor.

🎓
Quer aprender Excel de verdade, do zero ao avançado? Conheça o Curso Excel pra Ontem — aulas práticas, direto ao ponto, sem enrolação. Do zero ao avançado, no seu ritmo
Conhecer o curso →

Evento Worksheet_Change: reagindo a mudanças em células

O evento mais usado é o Worksheet_Change, que é disparado toda vez que uma célula da planilha é alterada:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B2")) Is Nothing Then
        MsgBox "Você alterou a célula B2! Novo valor: " & Target.Value
    End If
End Sub

O parâmetro Target representa a célula que foi alterada. O Intersect verifica se a célula alterada é a B2.

Validação automática com Worksheet_Change

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C2:C100")) Is Nothing Then
        If Target.Value < 0 Then
            MsgBox "Valor negativo não permitido!", vbExclamation
            Application.Undo
        End If
    End If
End Sub

Worksheet_SelectionChange: reagindo à seleção de células

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' destacar a linha inteira da célula selecionada
    Cells.Interior.ColorIndex = xlNone
    Target.EntireRow.Interior.Color = RGB(255, 255, 200)
End Sub

Workbook_Open: executar macro ao abrir o arquivo

Esse evento fica no módulo ThisWorkbook e é executado toda vez que o arquivo é aberto:

Private Sub Workbook_Open()
    MsgBox "Bem-vindo! Hoje é " & Format(Date, "DD/MM/YYYY")
End Sub

Workbook_BeforeClose: executar ação antes de fechar

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If MsgBox("Deseja salvar antes de fechar?", vbYesNo) = vbYes Then
        ThisWorkbook.Save
    End If
End Sub

Cuidados ao usar eventos

Tome cuidado para não criar eventos que chamam outros eventos em cadeia infinita. Para desativar temporariamente os eventos dentro de um código VBA, use Application.EnableEvents = False e reative com True ao final. Isso evita que uma macro que altera células dispare o Worksheet_Change acidentalmente.

Este conteúdo faz parte do nosso guia completo de VBA para iniciantes.

Perguntas frequentes

O que são eventos no VBA do Excel?

São procedimentos especiais que rodam automaticamente quando algo acontece na planilha, como mudar uma célula, selecionar uma aba ou abrir o arquivo.

Como criar uma macro que reage sempre que uma célula específica é alterada?

Use o evento Worksheet_Change no módulo da planilha (acessado com duplo clique no nome da aba no editor VBA), verificando com Intersect se a célula alterada é a desejada.

Como evitar que uma macro dispare o próprio evento Worksheet_Change em cadeia infinita?

Use Application.EnableEvents = False antes de alterar células dentro do código e reative com True ao final, evitando que a própria macro dispare o evento novamente.


Se você curtiu esse artigo onde mostramos como usar eventos no VBA do Excel, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *