我正在从Excel工作表中调用VBA函数。当我更改VBA函数代码中的单元格时,Excel会再次尝试重新执行该函数(并在第二次迭代中再次执行...)
示例:如果您有代码:
Function test() As Variant
Range("A1") = 1
test = "test"
End Function
当你在任何地方使用"=test()"
时,它将返回#VALUE!
。调试将显示当您更新A1时,它将尝试重新执行test()。
你能阻止Excel这样做吗?例如。说'在我完成这个功能之前不要更新我的任何数字'?我已经尝试过Application.Calculation
标志,或进行一些外部并发检查,但这似乎不起作用......
尝试:
Function test() as Variant
test="test"
End Function
正如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
来实现。
要回答您在更改A1或函数时如何停止函数重新执行的特定问题,并停止返回#Value: 1.使用Excel用户界面(公式 - >计算选项)将计算模式更改为手动 2.像这样为你的函数添加一些错误捕获。
Function test() As Variant
On Error Resume Next
Range("A1") = 1
test = "test"
End Function
正如已经说过的那样,该函数不会改变A1的值