2011-06-01 70 views
2

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

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

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

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

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

回答

0

我最终采用了xlsm方法。

2

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