为什么这个VBA索引语句给出错误?

在Excel中

Dim arr1 As Variant arr1 = WorksheetFunction.Index(Cells, Evaluate("row(1:100)"), Array(1, 7, 4, 3, 2)) arr1 = Application.Index(Cells, Evaluate("row(1:100)"), Array(1, 7, 4, 3, 2)) 

arr1赋值的第一次尝试失败,错误13(types不匹配),但第二次尝试正常工作。

但是,虽然WorksheetFunction对象是Application对象的一部分,但Application对象本身似乎没有“index”方法。 然而,代码的作品。 任何想法为什么?

物有所值,

 arr1 = Application.WorksheetFunction.Index(Cells, Evaluate("row(1:100)"), Array(1, 7, 4, 3, 2)) 

失败,错误13也是如此。

通过WorksheetFunctionApplication调用的Excel函数应该做同样的事情,但是它们在许多方面有所不同,因为它们是在不同的时间和不同的团队编写的。

WorksheetFunction.Index期望第二个参数是一个数字 。 这似乎是写它的原型的一个“错误”,因为Excel的实际INDEX函数接受第二个参数的数组。 奇怪的是, WorksheetFunction.Index的第三个参数接受数组,因为它在原型中声明为Variant 。 这个错误只出现在第二个声明As Double参数上,因此type mismatch

WorksheetFunction.doStuffApplication.doStuff之间还有其他已知的区别。 即:

  • 如果在计算中发生错误,则前者会产生运行时错误。 后者只是返回一个错误的变体 ,你可以通过代码使用IsError来检查

  • 以前的函数出现在智能感知中,但是以一种非常模糊,几乎毫无用处的方式。

我总是喜欢通过Application对象调用Excel函数。