为什么这个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也是如此。
通过WorksheetFunction
和Application
调用的Excel函数应该做同样的事情,但是它们在许多方面有所不同,因为它们是在不同的时间和不同的团队编写的。
WorksheetFunction.Index
期望第二个参数是一个数字 。 这似乎是写它的原型的一个“错误”,因为Excel的实际INDEX
函数接受第二个参数的数组。 奇怪的是, WorksheetFunction.Index
的第三个参数接受数组,因为它在原型中声明为Variant
。 这个错误只出现在第二个声明As Double
参数上,因此type mismatch
。
WorksheetFunction.doStuff
和Application.doStuff
之间还有其他已知的区别。 即:
-
如果在计算中发生错误,则前者会产生运行时错误。 后者只是返回一个错误的变体 ,你可以通过代码使用
IsError
来检查 -
以前的函数出现在智能感知中,但是以一种非常模糊,几乎毫无用处的方式。
我总是喜欢通过Application
对象调用Excel函数。