El código VBA no se ejecuta cuando una fórmula cambia la celda
La hoja de trabajo A tiene rangos de datos que se recopilan de la hoja de trabajo B. La hoja de trabajo A tiene una macro que calcula si los datos están por encima de un valor y luego llama a un módulo de correo electrónico para enviar correos electrónicos a los usuarios seleccionados.
Cuando los datos se ingresan manualmente en la Hoja de trabajo A , la macro funciona; sin embargo, cuando los datos se extraen de la Hoja de trabajo B , no se activa.
No estoy seguro de qué necesito cambiar en mi código VBA.
Private Sub Worksheet_Change(ByVal Target As Range)
Call MailAlert(Target, "B5:M5", 4)
Call MailAlert(Target, "B8:M8", 7)
Call MailAlert(Target, "B11:M11", 6)
Call MailAlert(Target, "B14:M14", 2)
Call MailAlert(Target, "B17:M17", 4)
Call MailAlert(Target, "B20:M20", 1)
Call MailAlert(Target, "B23:M23", 3)
Call MailAlert(Target, "B26:M26", 1)
Call MailAlert(Target, "B29:M29", 5)
Call MailAlert(Target, "B32:M32", 1)
Call MailAlert(Target, "B35:M35", 7)
Call MailAlert(Target, "B38:M38", 20)
Call MailAlert(Target, "B41:M41", 0)
End Sub
Private Sub MailAlert(ByVal Target As Range, ByVal Address As String, ByVal Value As Integer)
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range(Address), Target) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value > Value Then
Call Mail_small_Text_Outlook
End If
Application.EnableEvents = True
End If
End Sub
Para capturar los cambios mediante una fórmula hay que utilizar el Worksheet_Calculate()
evento. Para entender cómo funciona, tomemos un ejemplo.
- Cree un nuevo libro de trabajo.
- En la Hoja1 Celda A1, coloque esta fórmula
=Sheet2!A1+1
Ahora en un módulo pega este código.
Public PrevVal As Variant
Pegue esto en el área de Código de hoja
Private Sub Worksheet_Calculate()
If Range("A1").Value <> PrevVal Then
MsgBox "Value Changed"
PrevVal = Range("A1").Value
End If
End Sub
Y por último en el ThisWorkbook
área Código pega este código.
Private Sub Workbook_Open()
PrevVal = Sheet1.Range("A1").Value
End Sub
Cierre y guarde el libro y vuelva a abrirlo. Ahora realice cualquier cambio en la celda A1 de Sheet2
. Notarás que aparecerá el cuadro de mensaje.MsgBox "Value Changed"
INSTANTÁNEAS