Passei muito tempo pesquisando isso e aprendendo como tudo funciona, depois de realmente bagunçar os gatilhos de eventos. Como havia tantas informações espalhadas, decidi compartilhar o que descobri para funcionar em um só lugar, passo a passo da seguinte maneira:
1) Abra o VBA Editor, em VBA Project (YourWorkBookName.xlsm), abra o objeto Microsoft Excel e selecione a planilha à qual o evento de alteração se refere.
2) A visualização do código padrão é "Geral". Na lista suspensa na parte superior central, selecione "Planilha".
3) Private Sub Worksheet_SelectionChange já está lá como deveria estar, deixe como está. Copie / cole o código de Mike Rosenblum acima e altere a referência .Range para a célula para a qual você está procurando uma alteração (B3, no meu caso). Não coloque sua macro ainda, no entanto (removi a palavra "Macro" depois de "Então"):
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
End Sub
ou na lista suspensa no canto superior esquerdo, selecione "Alterar" e, no espaço entre Private Sub e End Sub, cole If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
4) Na linha após "Então" desligue os eventos para que quando você chamar a sua macro, ela não acione eventos e tente executar esta Worksheet_Change novamente em um ciclo sem fim que trava o Excel e / ou bagunça tudo:
Application.EnableEvents = False
5) Chame sua macro
Call YourMacroName
6) Ative os eventos novamente para que a próxima mudança (e qualquer / todos os outros eventos) seja acionada:
Application.EnableEvents = True
7) Termine o bloco If e o Sub:
End If
End Sub
Todo o código:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("B3")) Is Nothing Then
Application.EnableEvents = False
Call UpdateAndViewOnly
Application.EnableEvents = True
End If
End Sub
Isso ativa / desativa eventos dos Módulos, o que cria problemas e simplesmente permite que a alteração seja acionada, desativa eventos, executa sua macro e ativa os eventos novamente.