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