请教通过公式更改单元格时,VBA代码不会运行

通过公式更改单元格时,VBA代码不会运行

工作表A具有从工作表B收集的数据范围。工作表A有一个宏,用于计算数据是否高于某个值,然后调用电子邮件模块向所选用户发送电子邮件。

当在工作表A上手动输入数据时,宏工作,但是当从工作表B中提取数据时,它不会触发。

我不确定我的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 SubPrivate 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 IfEnd Sub


交互式爱情
浏览 579回答 2
2回答

ibeautiful

要通过公式捕获更改,您必须使用该Worksheet_Calculate()事件。为了理解它是如何工作的,让我们举一个例子。创建一个新工作簿。在Sheet1 Cell A1中,输入此公式&nbsp;=Sheet2!A1+1现在在模块中粘贴此代码Public&nbsp;PrevVal&nbsp;As&nbsp;Variant将其粘贴到“图纸代码”区域中Private&nbsp;Sub&nbsp;Worksheet_Calculate() &nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Range("A1").Value&nbsp;<>&nbsp;PrevVal&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox&nbsp;"Value&nbsp;Changed" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrevVal&nbsp;=&nbsp;Range("A1").Value&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;IfEnd&nbsp;Sub最后在ThisWorkbook代码区域粘贴此代码Private&nbsp;Sub&nbsp;Workbook_Open() &nbsp;&nbsp;&nbsp;&nbsp;PrevVal&nbsp;=&nbsp;Sheet1.Range("A1").ValueEnd&nbsp;Sub关闭并保存工作簿并重新打开它。现在对单元格A1进行任何更改Sheet2。您会注意到您将收到消息框MsgBox "Value Changed"
打开App,查看更多内容
随时随地看视频慕课网APP