Excel重新计算顺序 – 为什么依赖单元格在前面的单元格之前计算?

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

Excel 2010 / 32bit最新全部。

为了说明问题,我创build了一个简单的函数

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

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

单元格经常重新计算多次:Excel以重新计算序列开始,该序列是先前的计算序列加上所有已修改单元格的后进先出(后进先出)。 这会导致函数被调用并给出未计算的单元格 – 稍后再次调用函数。
您可以使用IsEmpty在UDF中检测未计算的单元格
请参阅http://www.decisionmodels.com/calcsecretsj.htm了解有关UDF和检测未计算细胞的详细信&#x606F;
和Excel的计算顺序的细节http://www.decisionmodels.com/calcsecretsc.htm

顺便说一句,小心Range.Dirty – 它有点儿车