嗨,欢迎来到Evaluate()之谜
MSDN Office 开发人员参考 (2013) 文档说:
使用方括号(例如,“[A1:C5]”)与使用字符串参数调用 Evaluate 方法相同。
因此,我运行了一个非常简单的代码来查看Microsoft 的 Evaluate()方法文档的准确性。
毫不奇怪,我得到了一个奇怪但一致的结果。
注意: 执行Immediate Window
CTRL+中的 4 个命令中的每一个G。查看每个调用的不同之处。注意显示每个 MsgBox 两次的内置错误。请记住这一点,不要感到困惑......
将此代码粘贴到模块中
Private Sub SleepESub()
Application.Wait Now + TimeValue("0:00:20")
MsgBox "w8'd "
End Sub
然后在即时窗口中执行这 4 个命令(一次 1 个)
? Evaluate ("SleepESub()")
? [SleepESub()]
? [SleepESub]
? SleepESub
前 2 个立即执行代码;对我来说意味着他们已经评估了代码。第三个(根据文档)应该是Evaluating
,但它的行为方式与在模块的 body 中的行为方式不同。立即窗口正在给出一个Error 2023
但是来自模块主体内的相同调用执行它,就好像您正在调用一个子程序一样。20 seconds
如果它是正常Call SleepESub()
的,即第 4 次调用,它会等待类似的情况。
谁能解释我在这里缺少什么?第 3 行不是正确的Evaluation
调用吗?还是它评估对 sub 本身的调用(如果有意义的话)
更新:
我认为有些人误解了我在这里评估的内容——别担心这是一个高级主题,我不是作家,你也不是读心者。(原谅我......)
为了更好地了解,您可以比较即时窗口与模块主体的结果。试试这个代码:
' Run each of the calls separately
' in a module's body and compare it with
' the previous calls from the Immediate Window
Sub ModuleBody()
Evaluate ("SleepESub()")
'[SleepESub()]
'[SleepESub]
'SleepESub
End Sub