VBA Excel UDF保留原始值

标签 vba excel vsto user-defined-functions

我在 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/

相关文章:

c# - 展望 : How to get email from Recipient field?

c# - 从 VSTO 插件获取 Outlook 窗口

c# - 如何检测 Excel 是否通过自动化启动(VSTO Addin 上下文)

excel 2003 vba ..写arraylist

excel - 单击时更改列表框的颜色

mysql - 如何在CakePHP中将mysql表数据转换为Excel或CSV格式?

excel - 互操作 Excel 方法 LinEst 因 DISP_E_TYPEMISMATCH 失败

excel - CLng 函数返回有趣的值

vba - 使用 VBA 更改 Word 中除一张表格外的所有表格的颜色

ms-access - 将解决方案保留在 VBA 中