3

据我所知,Worksheet_Calculate当工作表中任何单元格的值在公式重新计算时发生变化时调用。

有没有办法让我只需要在公式重新计算中特定单元格发生变化时才调用函数

4

2 回答 2

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 事件来检测您的工作表,并相应地设置计算

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

于 2012-09-28T11:17:50.123 回答
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 的回答可以解决您的直接问题,但会导致电子表格在您更改其他单元格时不会自动计算。

于 2012-09-28T18:55:50.703 回答