Pasé mucho tiempo investigando esto y aprendiendo cómo funciona todo, después de realmente estropear los desencadenantes del evento. Como había tanta información dispersa, decidí compartir todo lo que encontré que funciona en un solo lugar, paso a paso, de la siguiente manera:
1) Abra el Editor de VBA, en Proyecto VBA (YourWorkBookName.xlsm) abra el Objeto de Microsoft Excel y seleccione la Hoja a la que pertenecerá el evento de cambio.
2) La vista de código predeterminada es "General". En la lista desplegable en la parte superior central, seleccione "Hoja de trabajo".
3) Private Sub Worksheet_SelectionChange ya está allí como debería estar, déjelo en paz. Copie / pegue el código de Mike Rosenblum de arriba y cambie la referencia .Range a la celda para la que está esperando un cambio (B3, en mi caso). Sin embargo, no coloque su macro todavía (eliminé la palabra "Macro" después de "Entonces"):
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
End Sub
o en la lista desplegable en la parte superior izquierda, seleccione "Cambiar" y en el espacio entre Private Sub y End Sub, pegue If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
4) En la línea después de "Entonces", apague los eventos para que cuando llame a su macro, no active eventos e intente ejecutar este Worksheet_Change nuevamente en un ciclo interminable que bloquea Excel y / o estropea todo:
Application.EnableEvents = False
5) Llame a su macro
Call YourMacroName
6) Vuelva a activar los eventos para que se active el siguiente cambio (y todos los demás eventos):
Application.EnableEvents = True
7) Finalice el bloque If y el Sub:
End If
End Sub
El código completo:
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
Esto elimina la activación / desactivación de eventos de los módulos, lo que crea problemas y simplemente permite que el cambio se active, apague eventos, ejecute su macro y vuelva a activar los eventos.