我在 VBA 中有一个 UDF 非易失函数,它需要初始化一个全局变量(回调到 VSTO)。
此函数位于 xla 或 xlam 中(行为相同)
如果变量尚不可用,有没有办法取消公式的计算?
在 Excel 自动重新计算模式下(我不想更改),每次打开工作簿时,Excel 都会使用我的函数重新计算单元格,将单元格中保存的值替换为错误:“#ARG!”。
如果我的变量未初始化,我知道如何返回空单元格,但是否可以返回原始值?我用调试器检查它已保存在工作簿中。试图返回 Application.Caller.Value2
导致循环引用。
此外,如果 VBA 代码嵌入在工作簿 (xlsm) 中,或者工作簿为 xls 格式,则不会调用该函数(预期行为)。但是,将工作簿转换为 xlsx 会导致在按所述打开工作簿后重新计算单元格。
最佳答案
您可以在 XLM 或 C XLL 中通过将函数标记为宏函数来执行此操作。在 VBA 中,我知道的唯一简单方法是丑陋的 hack:如果变量未初始化,则返回 Application.Caller.Text。
这受到主要缺陷的影响,即它为您提供了单元格的格式化值而不是实际值。
否则,您必须建立一种在已关闭但已保存的工作簿中持久保存单元格值的方法:可能的方案包括使用定义的名称、单元格注释、注册表、外部文件等,但我不认为有一个干净的VBA 解决方案。
关于VBA Excel UDF保留原始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6198140/