我无法让VBA的Evaluate()函数只执行一次; 它似乎总是运行两次.例如,考虑下面的简单示例.如果我们运行RunEval()子例程,它将调用两次EvalTest()函数.这可以通过在即时窗口中打印的两个不同的随机数看出.如果我们使用Evaluate而不是函数调用另一个子例程,行为将是相同的.有人可以解释我如何获得Evaluate执行目标函数一次而不是两次?谢谢.
Sub RunEval()
Evaluate "EvalTest()"
End Sub
Public Function EvalTest()
Debug.Print Rnd()
End Function
Run Code Online (Sandbox Code Playgroud)
这个错误似乎只发生在UDF上,而不是内置函数.您可以通过添加表达式来绕过它:
Sub RunEval()
ActiveSheet.Evaluate "0+EvalTest()"
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,Evaluate还有许多其他限制, 请参见http://www.decisionmodels.com/calcsecretsh.htm