1

我正在从 Excel 工作表中调用 VBA 函数。当我更改 VBA 函数代码中的单元格时,Excel 会尝试再次重新执行该函数(并在第二次迭代中再次执行......)

示例:如果您有代码:

Function test() As Variant
    Range("A1") = 1
    test = "test"
End Function

当您"=test()"在任何地方使用时,它将返回#VALUE!. 调试将显示当您更新 A1 时,它将尝试重新执行 test()。

你能阻止 Excel 这样做吗?例如说'在我完成此功能之前不要更新我的任何号码'?我已经尝试过该Application.Calculation标志,或者进行了一些外部并发检查,但这似乎不起作用......

4

3 回答 3

0

尝试:

Function test() as Variant
test="test"
End Function
于 2013-11-06T23:39:01.233 回答
0

正如 Gary 的学生在他的评论中所说:UDF 应该只更改调用函数的单元格的工作表条目,并且该值应该作为函数的结果返回,而不是通过更改显式地址的单元格值。

换句话说,这不起作用:

Function test() As Variant
    Range("A1") = 1
    test = "test"
End Function

而是test()从单元格 A1 调用并执行以下操作:

Function test() As Variant
    test = 1
End Function

如果期望的行为是编辑多个单元格(函数的返回值和另一个单元格),这应该通过 asub而不是 a来实现function

于 2015-01-10T14:15:50.423 回答
-1

要回答您更改 A1 或函数时如何停止函数重新执行并停止返回#Value 的具体问题:
1. 使用 Excel 用户界面(公式-> 计算选项)将计算模式更改为手动
2.像这样在你的函数中添加一些错误捕获。

Function test() As Variant
    On Error Resume Next
    Range("A1") = 1
    test = "test"
End Function

正如已经说过的那样,该函数不会改变 A1 的值

于 2013-11-07T00:10:03.570 回答