Arn*_*nas 5 excel vba excel-vba excel-2010
我有一个奇怪的问题,Excel计算顺序 - 依赖单元格在前一个单元格之前计算,当设置范围脏时,使用空参数值.有没有办法检测那些"假"电话?这对我来说至关重要,因为我在现实世界的应用程序中运行一些聪明的业务逻辑,而那些"虚假"的调用打破了所有逻辑.此外,如果使用RTD注册那些"假"调用,则不会将其正确绑定到主题,因此不会通知主题断开连接.
Excel 2010/32bit最新版.
为了说明问题,我创建了简单的函数:
Function Fnc(param2 As String) As String
Fnc = Application.ThisCell.Address
Debug.Print (Application.ThisCell.Address & " - " & param2)
End Function
Run Code Online (Sandbox Code Playgroud)
和程序:
Sub SetDirty()
Range("B1:C1").Dirty
End Sub
Run Code Online (Sandbox Code Playgroud)
简单的表:
$ 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
感谢您的任何意见.我更喜欢解决这个问题的解决方案,而不是解决方法,因为它已经成为一堆变通方法的一部分.
通常会多次重新计算单元格:Excel以重新计算序列开始,该序列是先前的计算序列加上所有已修改单元格的LIFO(后进先出).这会导致函数被调用并给出未计算的单元格 - 稍后会再次调用这些函数.
您可以使用的IsEmpty检测未计算的细胞,你的UDF
见http://www.decisionmodels.com/calcsecretsj.htm关于UDF的细节和检测未计算的细胞
和http://www.decisionmodels.com/calcsecretsc.htm为Excel的细节计算顺序.
BTW要小心Range.Dirty - 有点儿马车