5

我对 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),我会得到,如预期的那样:

$B$1 - $A$1

$C$1 - $B$1

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

$C$1 - <---- 这是哪里来的?

$B$1 - $A$1

$C$1 - $B$1

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

4

1 回答 1

6

单元格通常会多次重新计算:Excel 以重新计算序列开始,该序列是先前的计算序列加上所有修改单元格的 LIFO(后进先出)。这会导致调用函数并给出未计算的单元格 - 稍后再次调用函数。
您可以使用 IsEmpty检测 UDF 中未计算的单元格 有关 UDF 和检测未计算单元格的详细信息,请
参见http://www.decisionmodels.com/calcsecretsj.htm ,有关 Excel 的详细信息,请参见http://www.decisionmodels.com/calcsecretsc.htm计算顺序。顺便说一句,Range.Dirty 要小心-它有点马车


于 2012-06-01T08:03:51.270 回答