El código VBA no se ejecuta cuando una fórmula cambia la celda

Resuelto Kenan Fallon asked hace 12 años • 2 respuestas

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
Kenan Fallon avatar Jul 10 '12 11:07 Kenan Fallon
Aceptado

Para capturar los cambios mediante una fórmula hay que utilizar el Worksheet_Calculate()evento. Para entender cómo funciona, tomemos un ejemplo.

  1. Cree un nuevo libro de trabajo.
  2. 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

ingrese la descripción de la imagen aquí

Siddharth Rout avatar Jul 10 '2012 08:07 Siddharth Rout