如何防止VBA函数在代码内重新执行

时间:2013-11-06 23:31:35

标签: excel vba excel-vba

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

示例:如果您有代码:

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

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

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

3 个答案:

答案 0 :(得分:0)

尝试:

Function test() as Variant
test="test"
End Function

答案 1 :(得分:0)

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

换句话说,这不起作用:

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

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

Function test() As Variant
    test = 1
End Function

如果所需的行为是编辑多个单元格(函数和其他单元格的返回值),则应通过sub而不是function来实现。

答案 2 :(得分:-1)

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

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

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