当xlCoerce返回一个值时,它是否再次在单元格中计算公式?
当我在Excel中用C#编写一个简单的UDF时,我遇到了一个问题
该function使用这个:
var reference = XlCall.Excel(XlCall.xlfCaller); string oldValue = ((ExcelReference)reference).GetValue().ToString();
这将导致循环引用错误( GetValue
尝试通过再次调用UDF来重新评估单元格),除非我指定了IsMacroType=true
,它将该函数标记为类2(将#
添加到公式中)。
我不知道如何连接到循环错误。 但我猜ExcelReference.GetValue()
有时会评估单元格,有时不是?
看来2类只影响xlfCaller
,
后来我检查了ExcelReference
的源代码,事实certificate,它实际上是调用xlCoerce。
另外,我注意到当我在单元格上按F2时,无论单元格是什么, GetValue()
返回0。 而当我按Ctrl + Alt + F9强制重新计算所有, GetValue()
返回以前的计算值。
有人能再详细说一下吗? xlCoerce是如何在单元值/公式上工作的,第二类如何影响它?
xlCoerce
只是获取引用中包含的值的标准方式。 本身,使用ExcelReference进行调用不应该导致单元格重新计算。
如果你的函数被注册为一个macros表等价函数(在你的Excel-DNA声明中joinIsMacroType=true
),那么它将能够在计算时读取表单中的任何值,包括调用单元格的前一个值。 在用F2编辑公式的情况下,这不仅仅是重新计算,而是整个单元格内容的重新input,因此与强制执行重新计算相比,这种行为是有意义的。
它可能不会直接回答你的问题,但查尔斯·威廉姆斯在这里的Excel计算过程有一个很好的写作: http : //www.decisionmodels.com/calcsecretsc.htm 。