在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而失败。
答案 0 :(得分:3)
通过WorksheetFunction
和Application
调用的Excel函数假设做同样的事情,但它们在很多方面都有所不同,因为它们是在不同时间和不同时间编写的队。
WorksheetFunction.Index
期望第二个参数是数字。这似乎是编写原型时的“错误”,因为Excel的实际INDEX
函数接受第二个参数的数组。奇怪的是,WorksheetFunction.Index
的第三个参数接受数组,因为它在原型中被声明为Variant
。错误仅发生在声明为As Double
的第二个参数上,因此发生在type mismatch
。
WorksheetFunction.doStuff
和Application.doStuff
之间存在其他已知差异。即:
如果计算中出现错误,前者会引发运行时错误。后者只返回错误变体,您可以使用IsError
以前的功能出现在Intellisense中,但是模糊不清,几乎没用。
我总是喜欢通过Application
对象调用Excel函数。