Como usar eventos no VBA do Excel para criar planilhas reativas

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.

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 *