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

时间:2017-07-23 18:10:40

标签: excel vba excel-vba 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(类型不匹配),但第二次尝试正常。

但是,虽然WorksheetFunction对象是Application对象的一部分,但Application对象本身似乎没有" index"方法。然而代码有效。有什么想法吗?

为了它的价值,

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

也因错误13而失败。

1 个答案:

答案 0 :(得分:3)

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

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

WorksheetFunction.doStuffApplication.doStuff之间存在其他已知差异。即:

  • 如果计算中出现错误,前者会引发运行时错误。后者只返回错误变体,您可以使用IsError

  • 按代码检查
  • 以前的功能出现在Intellisense中,但是模糊不清,几乎没用。

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