据我所知,当工作表中的任何单元格的值在公式重新计算时发生更改时,将调用Worksheet_Calculate
。
有没有办法让我只需要在特定细胞更改公式重新计算时调用函数
答案 0 :(得分:2)
要在更改特定单元格时发生某些事情,您需要在文件Worksheet_Change(byval target as Range)
中嵌入相关的选择更改事件。当您的单元格更改时,我们可以重新计算工作表,如下所示:
Private Sub Worksheet_Change(byval target as range)
If target.address = Range("YourCell").Address Then Application.Calculate
End Sub
现在您要做的是在其余时间关闭计算。如果您只想关闭单张纸上的计算(而不是整个文件),则需要在激活时关闭计算,并在取消激活时关闭计算,例如。
Private Sub Worksheet_Activate
Application.Calculation = xlCalculationManual
End Sub
Private Sub Worksheet_Deactivate
Application.Calculation = xlCalculationAutomatic
End Sub
当然,您重新计算的要求可能比上述示例复杂得多。首先,您可以在相关工作表上打开文件,在这种情况下,您应该使用Workbook_Open事件来检测工作表,并相应地设置计算
然后你可能有几个细胞可能需要某种计算。大概你想要关闭计算的原因是文件运行得太慢了。如果是这样,并且您正在识别所有输入单元格,则可以使用代码输入输出。一种方法是使用本指南输入公式entering formulas in Excel Visual Basic。然后,您可以使用计算值替换公式,例如Range("YourCell") = Range("YourCell").Value
...所以停止不断增长的表格中的公式数量
答案 1 :(得分:1)
让我看看我是否正确地解释了你的问题。您想知道如果特定单元格(或单元格组)发生更改,是否可以仅启动宏。
答案是肯定的。稍微调整Ed的代码。
Private Sub Worksheet_Change(byval target as range)
If Not Intersect(target.address, Range("YourCells")) is Nothing Then
MyMacro()
End If
End Sub
我认为你使用“功能”会让人失望。这就是为什么Ed的答案如此精细。
确定。您可能正确地陈述了您的问题,而您只是想提高效率。在这种情况下,Ed的答案可以解决您的直接问题,但是当您更改其他单元格时,会导致电子表格无法自动计算。