Application.WorksheetFunction 与 WorksheetFunction

Jvd*_*vdV 2 excel vba worksheet-function

这是一个相当短的问题,可能很容易回答,但是我自己在这一点上没有这样做:


样本数据:

A
B
C
Run Code Online (Sandbox Code Playgroud)

示例代码:

With Sheet1
    Debug.Print Application.WorksheetFunction.Match("D", .Columns(1), 0)    'Option1
    Debug.Print Application.Match("D", .Columns(1), 0)                      'Option2
    Debug.Print WorksheetFunction.Match("D", .Columns(1), 0)                'Option3
End With
Run Code Online (Sandbox Code Playgroud)

题:

我知道 option2 丢失了智能感知并且不会进入调试模式,但是 option1 和 option3 的行为相同

  • 智能感知工作
  • 抛出错误,代码进入调试模式

虽然关于WorksheetFunction对象的文档我们可以使用对象的WorksheetFunction属性Application,但不这样做似乎也能正常工作。

那么,Application在这方面使用对象引用有什么附加价值,不使用它有什么缺点呢?

Mic*_*zyn 5

我会说这Application是全局上下文,当我们使用任何东西时,编译器在其当前上下文中找不到,它会在 中Application查找,最终Application.WorksheetFunction在您的情况下找到。所以两者应该是等价的。(这就是它在 JavaScript 中的工作方式)但我可能是错的。

更新

文档指出,某些函数和属性可以在没有 Application. 的情况下调用,因此 Application.WorksheetFunction 确实等效于 WorksheetFunction,但它是错误的,Application 作为全局上下文。

更新

根据这篇有趣的文章Application确实是默认对象:

Application 对象是默认对象,即使未指定,Excel 也会假定它。