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

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

例如:如果你有代码:

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

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

你可以防止Excel做到这一点? 比如说,在我完成这个function之前,不要更新我的任何号码? 我试过Application.Calculation标志,或者做一些外部的并发检查,但似乎并不工作…

尝试:

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

正如Gary的学生在他的评论中所说的:不要试图从UDF中改变工作表单元格,只能通过其头部返回一个值。

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

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

就像已经说过的那样,函数不会改变A1的值