Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个VBA index语句会出现错误?_Vba_Excel_Worksheet Function - Fatal编程技术网

为什么这个VBA index语句会出现错误?

为什么这个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

在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(类型不匹配),但第二次尝试正常工作

但是,尽管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函数