VBA Excel UDF保留原始值

Posted

技术标签:

【中文标题】VBA Excel UDF保留原始值【英文标题】:VBA Excel UDF retaining original value 【发布时间】:2011-06-01 08:12:51 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

我最终选择了 xlsm 方法。

【讨论】:

以上是关于VBA Excel UDF保留原始值的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA - 保留指定列并删除所有其他列

请教!excel单元格内的数值发生变化时如何保留它以前的值

VBA Excel 备份:通过 VBA 以新名称保存当前工作簿的副本,保留 VBA 脚本,无提示

如何将 Excel 数组公式传递给 VBA UDF?

请问,在Excel中如何用VBA提取数据后保留原格式不变?

如何在excel vba中保留格式复制