VBA Excel UDF保留原始值

我在VBA中有一个UDF非易失性函数,它需要一个全局variables(callbackVSTO)初始化。 这个函数驻留在xla或xlam(相同的行为)

如果variables尚不可用,是否有办法取消公式的计算?

在Excel自动重新计算模式下(我不想改变这种情况)每次打开工作簿时,Excel都会用我的函数重新计算单元格,将单元格中保存的值replace为“#ARG!”。

我知道如何返回空单元格,如果我的variables没有初始化,但有可能返回原始值? 我用debugging器检查过它已保存在工作簿中。 试图返回Application.Caller.Value2导致循环引用。

另外,如果将VBA代码embedded到工作簿(xlsm)中,或者工作簿采用xls格式,则不会调用函数(预期行为)。 但是,将工作簿转换为xlsx会导致在按照所述打开工作簿之后重新计算单元格。

您可以通过将函数标记为macros函数来在XLM或C XLL中执行此操作。 在VBA中,我知道的唯一简单的方法是一个丑陋的黑客:如果variables未初始化,则返回Application.Caller.Text。 这有一个主要的缺陷,它给你的单元格的价值,而不是实际价值。 否则,你必须build立一个方法来保存closures但保存的工作簿中的单元格的值:可能的scheme包括使用定义名称,单元格注释,registry,外部文件等,但我不认为有一个清洁VBA解决scheme。

我最终采用了xlsm的方法。