为什么这个VBA index语句会出现错误?
在Excel中为什么这个VBA index语句会出现错误?,vba,excel,worksheet-function,Vba,Excel,Worksheet Function,在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(类型不匹配),但第二次尝试正常工作 但是,尽管WorksheetFunct
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(类型不匹配),但第二次尝试正常工作
但是,尽管WorksheetFunction对象是应用程序对象的一部分,但应用程序对象本身似乎没有“索引”方法。然而,代码是有效的。你知道为什么吗
不管它值多少钱
arr1 = Application.WorksheetFunction.Index(Cells, Evaluate("row(1:100)"), Array(1, 7, 4, 3, 2))
失败并出现错误13。通过
工作表函数
调用的Excel函数和通过应用程序
调用的Excel函数应该做相同的事情,但它们在许多方面不同,因为它们是在不同的时间由不同的团队编写的
WorksheetFunction.Index
要求第二个参数为数字。这似乎是编写其原型时的一个“错误”,因为Excel的实际INDEX
函数接受数组作为第二个参数。奇怪的是,WorksheetFunction.Index
的第三个参数接受数组,因为它在原型中声明为Variant
。错误只发生在第二个参数上,该参数被声明为Double,因此类型不匹配
WorksheetFunction.doStuff
和Application.doStuff
之间还有其他已知的区别。i、 e:
- 如果计算中出现错误,前者会引发运行时错误。后者只返回一个错误变量,您可以使用
IsError
- 前面的函数以智能感知的方式出现,但非常模糊,几乎毫无用处
我总是喜欢通过应用程序
对象调用Excel函数