Excel 当值因Vlookup而更改时自动运行宏

Excel 当值因Vlookup而更改时自动运行宏,excel,vba,Excel,Vba,当A1中的单元格值根据vlookup公式更改时,我希望MyMacro自动运行。当满足依赖于A1值的条件时,MyMacro复制一行,然后将其粘贴到工作表的不同部分 我尝试过Target.Address和以下的变体,但都不起作用: Public Sub Worksheet_Calculate(ByVal Target As Range) Static OldVal As Variant If Range("A1").Value <> OldVal Then OldVal

当A1中的单元格值根据vlookup公式更改时,我希望MyMacro自动运行。当满足依赖于A1值的条件时,MyMacro复制一行,然后将其粘贴到工作表的不同部分

我尝试过Target.Address和以下的变体,但都不起作用:

Public Sub Worksheet_Calculate(ByVal Target As Range)
Static OldVal As Variant
   If Range("A1").Value <> OldVal Then
      OldVal = Range("A1").Value

If Not Intersect(Target(1), Range("C1401:I140")) Is Nothing Then
If Range("A1").Value < ActiveSheet.Range("A1").Value Then
    Range("C140:I140").Value = Range("B55:H55").Value
        ElseIf Range("B55").Value > ActiveSheet.Range("A1").Value Then
         Range("C140:I140").Formula = ""
End If
  End If
    End If

End Sub

Public Sub MyMacro()

Worksheet_Calculate ([C140])

End Sub
Public子工作表\u计算(ByVal目标作为范围)
静态OldVal作为变量
如果范围(“A1”)。值为OldVal,则
OldVal=范围(“A1”).值
如果不相交(目标(1),则范围(“C1401:I140”)为零
如果范围(“A1”)值ActiveSheet.Range(“A1”).Value然后
范围(“C140:I140”)。公式=“”
如果结束
如果结束
如果结束
端接头
公共子MyMacro()
工作表_计算([C140])
端接头
这样,只有在每次A1更改后手动点击Run宏时,MyMacro才起作用。我怎样才能让它成为自动的


谢谢。

如果要在计算单元格A1的值更改时执行操作,请使用相关工作表上的“工作表更改”事件

(在VBA编辑器中找到工作表,然后右键单击以选择“查看代码”)


如果要在计算单元格A1的值更改时执行操作,请使用相关工作表上的“工作表更改”事件

(在VBA编辑器中找到工作表,然后右键单击以选择“查看代码”)


如果您进入VBE并从下拉列表中选择Calculate事件,您将看到它没有任何参数,遗憾的是,您不能手动添加它们并希望它能够工作。因此,可能需要使用基于源单元格的事件。我相信网上有很多例子。不相关的注意:看看这个很酷的工具来清理缩进。我很惊讶它能编译出来。事件处理程序签名不能被弄乱-它们有定义它们的参数,调整签名只能破坏一切<代码>工作表。每当工作表计算时,都会触发计算。您的意思是代码第6行中的范围(“C1401:I140”)吗?我猜您指的是范围(“C140:I140”)。如果您进入VBE并从下拉列表中选择Calculate事件,您将看到它没有任何参数,遗憾的是,您不能手动添加它们并希望它能够工作。因此,可能使用基于源单元格的事件。我相信网上有很多例子。不相关的注意:看看这个很酷的工具来清理缩进。我很惊讶它能编译出来。事件处理程序签名不能被弄乱-它们有定义它们的参数,调整签名只能破坏一切<代码>工作表。每当工作表计算时,都会触发计算。您的意思是代码第6行中的范围(“C1401:I140”)吗?我猜你的意思是范围(“C140:I140”)。谢谢你的输入和@BigBen的压头。但是,当我添加上一行时,在A1更改和A1更改后,MyMacro停止响应(没有错误消息,只是什么也没有发生),我单击了Run Macro。如果您按照说明添加此代码(在相关工作表上的工作表\u Change事件中)然后,只要在代码中添加一个Msgbox调用或一个断点(我在代码中有“[调用您的更改例程]”),就可以轻松地验证当单元格A1发生更改时,它是否确实执行。然后单步执行(使用[F8]键查看代码没有达到预期效果的原因。还不清楚A1更改时是要执行例程,还是要执行第140行C列到I列中的单元格。如果调用工作表\u通过将相同的目标传递到工作表中来计算例程\u上面的更改,那么单元格A1将使第140行的intersect例程失败,而您的例程将不起任何作用。:-)嗨,Rina,我注意到您没有回复我的任何评论。如果您觉得答案有帮助,请将其标记为答案。谢谢。谢谢您的输入,@BigBen感谢压头。但是,当我添加上一行时,在A1更改和A1更改后,MyMacro停止响应(没有错误消息,只是什么也没有发生),我单击了Run Macro。如果您按照说明添加此代码(在相关工作表上的工作表\u Change事件中)然后,只要在代码中添加一个Msgbox调用或一个断点(我在代码中有“[调用您的更改例程]”),就可以轻松地验证当单元格A1发生更改时,它是否确实执行。然后单步执行(使用[F8]键查看代码没有达到预期效果的原因。还不清楚A1更改时是要执行例程,还是要执行第140行C列到I列中的单元格。如果调用工作表\u通过将相同的目标传递到工作表中来计算例程\u上面的更改,那么单元格A1将使第140行的intersect例程失败,而您的例程将不起任何作用。:-)嗨,Rina,我注意到您没有回复我的任何评论。如果您觉得答案有帮助,请将其标记为答案。谢谢
Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Range("$A$1"), Target) Is Nothing Then
         ... [call your change_routine]
    end if

End Sub