Excel评估树错误? 嵌套调用addin函数调用20,000次

Excel 2003,Windows XP SP3:

我们有一些Excel用户,他们使用非常大的复杂的Excel工作簿。 一个典型的工作簿可能有60多个工作表,并且大小可以超过70MB。 我们制作了一个.xll插件,并在整个这些电子表格中使用。 我们的插件具有丰富的debugging和日志function。

我们注意到一些非常奇怪和不稳定的行为,我们一直无法复制。 我在这里描述一个典型的问题的performanceforms。

一个电子表格的范围之一有一个公式数组,涉及对函数的嵌套调用,Excel函数和我们自己的插件函数。 公式可能看起来像这样:

{=IF(cndtn,AddinFcn1(rng,INDIRECT(VLOOKUP($A2549,rng2,col,0)),AddinFcn2(param)),-1)} 

AddinFcn1和AddinFcn2是我们的插件中的注册函数。 我们可以监视Excel调用每个插件函数的次数,并将所有调用与导致调用的单元格或范围评估进行匹配。 如果我们在一个干净的Excel中加载插件和工作簿,然后计算工作簿(“F9”),计算可能完成罚款的第一,第二,甚至10倍,我们可以看到一个调用AddinFcn2和AddinFcn1源于对包含上述公式的范围的评估。 但有些时候,事情开始疯狂了:在第三个“F9”中,内部的AddinFcn2可能突然被excel调用了19次,然后在第四个“F9”中,内部的AddinFcn2被调用了20,000次。 或者,也许一切都很好,直到第10个“F9”,在评估范围内突然内部AddinFcn2被调用了19,000次。 奇怪的是,外部函数AddinFcn1仍然只被调用一次。

当发生这种情况时,似乎没有韵律或理由,或者函数被调用了多less次。 进入调用的数据,实际上是电子表格中的数据,每个F9都是相同的 – 从一个计算到下一个计算都不会发生变化。

有没有人看过类似的行为? 有没有人猜测什么可能导致Excel(不必要地)重新计算内部函数调用数十甚至数十万次?