VBA Excel UDF保留原始值

时间:2011-06-01 08:12:51

标签: excel vba excel-vba vsto user-defined-functions

我在VBA中有一个UDF非易失性函数,它需要初始化一个全局变量(回调到VSTO)。 此函数驻留在xla或xlam(相同行为)

如果变量尚未可用,有没有办法取消公式的计算?

在Excel中自动重新计算模式(我不想更改)Excel每次打开工作簿时都会使用我的函数重新计算单元格,用错误替换单元格中保存的值:“#ARG!”。

如果我的变量未初始化,我知道如何返回空单元格,但是可以返回原始值吗?我用调试器检查它已保存在工作簿中。尝试返回Application.Caller.Value2会导致循环引用。

此外,如果VBA代码嵌入在工作簿(xlsm)中,或者工作簿是xls格式,则不会调用该函数(预期行为)。但是,将工作簿转换为xlsx会导致在打开工作簿后重新计算单元格。

2 个答案:

答案 0 :(得分:2)

您可以通过将该功能标记为宏功能,在XLM或C XLL中执行此操作。在VBA中,我知道的唯一简单方法是丑陋的黑客:如果变量未初始化,则返回Application.Caller.Text。 这有一个主要缺陷,它为您提供了单元格的格式化值而不是实际值。 否则,您必须构建一种在已关闭但保存的工作簿中保持单元格值的方法:可能的方案包括使用定义名称,单元格注释,注册表,外部文件等,但我不认为有干净VBA解决方案。

答案 1 :(得分:0)

我最终选择了xlsm方法。