我在VBA中有一个UDF非易失性函数,它需要初始化一个全局变量(回调到VSTO)。 此函数驻留在xla或xlam(相同行为)
中如果变量尚未可用,有没有办法取消公式的计算?
在Excel中自动重新计算模式(我不想更改)Excel每次打开工作簿时都会使用我的函数重新计算单元格,用错误替换单元格中保存的值:“#ARG!”。
如果我的变量未初始化,我知道如何返回空单元格,但是可以返回原始值吗?我用调试器检查它已保存在工作簿中。尝试返回Application.Caller.Value2
会导致循环引用。
此外,如果VBA代码嵌入在工作簿(xlsm)中,或者工作簿是xls格式,则不会调用该函数(预期行为)。但是,将工作簿转换为xlsx会导致在打开工作簿后重新计算单元格。
答案 0 :(得分:2)
您可以通过将该功能标记为宏功能,在XLM或C XLL中执行此操作。在VBA中,我知道的唯一简单方法是丑陋的黑客:如果变量未初始化,则返回Application.Caller.Text。 这有一个主要缺陷,它为您提供了单元格的格式化值而不是实际值。 否则,您必须构建一种在已关闭但保存的工作簿中保持单元格值的方法:可能的方案包括使用定义名称,单元格注释,注册表,外部文件等,但我不认为有干净VBA解决方案。
答案 1 :(得分:0)
我最终选择了xlsm方法。