Excel重新计算顺序 - 为什么依赖单元格在前一个单元格之前计算?

时间:2012-05-31 22:09:50

标签: excel excel-vba excel-2010 vba

我有一个奇怪的问题,Excel计算顺序 - 在设置范围脏时,在前一个单元格之前使用空参数值计算相关单元格。有没有办法检测那些“假”电话?这对我来说至关重要,因为我在现实世界的应用程序中运行一些聪明的业务逻辑,而那些“假”调用打破了所有逻辑。此外,如果使用RTD注册那些“假”调用,则不会将其正确绑定到主题,因此不会通知主题断开连接。

Excel 2010 / 32bit最新版本。

为了说明问题,我创建了简单的函数:

Function Fnc(param2 As String) As String
    Fnc = Application.ThisCell.Address
    Debug.Print (Application.ThisCell.Address & " - " & param2)
End Function

程序:

Sub SetDirty()
    Range("B1:C1").Dirty
End Sub

简单的表格:

$ A $ 1 = fnc(A1)= fnc(B1)

进入单元格A1,B1,C1。

结果很明显:

$ A $ 1 $ B $ 1 $ C $ 1

如果我重新计算( CTRL + Alt + Shift + F9 ),我会按预期得到:< / p>

$ B $ 1 - $ A $ 1

$ C $ 1 - $ B $ 1

但是,这里有趣的部分。如果我运行SetDirty:

$ C $ 1 - &lt; ----这是从哪里来的?

$ B $ 1 - $ A $ 1

$ C $ 1 - $ B $ 1

感谢您的任何意见。我更喜欢解决这个问题的解决方案,而不是解决方法,因为它已经成为一堆变通方法的一部分。

1 个答案:

答案 0 :(得分:6)

细胞通常会重复计算多次:Excel以重新计算序列开始,该序列是先前的计算序列加上所有修改过的单元格的LIFO(后进先出)。 这会导致函数被调用并给出未计算的单元格 - 稍后会再次调用这些函数 您可以使用IsEmpty来检测UDF中未计算的单元格 有关UDF和检测未计算单元格的详细信息,请参阅http://www.decisionmodels.com/calcsecretsj.htmhttp://www.decisionmodels.com/calcsecretsc.htm有关Excel计算顺序的详细信息。

BTW要小心Range.Dirty - 它有点车