在公式重新计算中只有特定Excel单元更改时调用函数

据我所知, Worksheet_Calculate中的任何单元格的值更改公式重新计算时调用Worksheet_Calculate

有没有办法,以便我需要一个函数只有当公式重新计算特定的单元格更改时才被调用

让我看看我是否正确地解释你的问题。 你想知道如果一个特定的单元格(或一组单元格)发生了变化,只能启动一个macros。

答案是肯定的 稍微调整Ed的代码。

 Private Sub Worksheet_Change(byval target as range) If Not Intersect(target.address, Range("YourCells")) is Nothing Then MyMacro() End If End Sub 

我认为你对“function”的使用正在抛弃人们。 这就是为什么埃德的答案如此详尽。

好。 你可能正确地expression了你的问题,你只是想获得效率。 在这种情况下,埃德的答案解决了你的直接问题,但会导致电子表格不能自动计算,当你改变其他细胞。

要在特定单元格更改时发生某些情况,需要将相关的select更改事件embeddedWorksheet_Change(byval target as Range) 。 我们可以在您的单元更改时重新计算工作表,如下所示:

 Private Sub Worksheet_Change(byval target as range) If target.address = Range("YourCell").Address Then Application.Calculate End Sub 

现在你想要做的就是在其余时间关掉计算。 如果您只想closures单张纸上的计算(而不是整个文件),则需要在启动时closures计算,在closures时closures计算

 Private Sub Worksheet_Activate Application.Calculation = xlCalculationManual End Sub Private Sub Worksheet_Deactivate Application.Calculation = xlCalculationAutomatic End Sub 

当然,重新计算的要求可能比上面的例子复杂得多。 首先,您可以在问题单上打开文件,在这种情况下,您应该使用Workbook_Open事件来检测您的工作表,并相应地设置计算

那么你可能有几个单元可能需要某种计算。 想要closures计算的原因可能是文件运行速度太慢。 如果是这样,并且您正在识别所有input单元格,则可以使用代码input输出。 一种方法是使用本指南input公式,在Excel Visual Basic中input公式 。 然后,您可以用计算的值replace公式,例如Range("YourCell") = Range("YourCell").Value …因此停止工作表中公式的数量不断增长