为什么这个 VBA 索引语句会报错?
Why does this VBA index statement give an error?
在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。
Excel 通过 WorksheetFunction
和 Application
调用的函数 应该 做同样的事情,但它们在许多方面不同,因为它们是在不同的时间由不同的团队编写的。
WorksheetFunction.Index
期望第二个参数是 数字 。这似乎是 "mistake" 在编写其原型时,因为 Excel 的实际 INDEX
函数接受第二个参数的数组。奇怪的是,WorksheetFunction.Index
的第三个参数接受数组,因为它在原型中被声明为 Variant
。该错误仅发生在声明为 As Double
的第二个参数处,因此 type mismatch
.
WorksheetFunction.doStuff
和 Application.doStuff
之间还有其他已知差异。即:
如果计算出现错误,前者会引发运行时错误。后者只是 returns 一个 错误变体 ,您可以使用 IsError
通过代码检查
以前的功能出现在 Intellisense 中,但非常模糊,几乎没有用。
我总是喜欢通过 Application
对象调用 Excel 函数。
在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。
Excel 通过 WorksheetFunction
和 Application
调用的函数 应该 做同样的事情,但它们在许多方面不同,因为它们是在不同的时间由不同的团队编写的。
WorksheetFunction.Index
期望第二个参数是 数字 。这似乎是 "mistake" 在编写其原型时,因为 Excel 的实际 INDEX
函数接受第二个参数的数组。奇怪的是,WorksheetFunction.Index
的第三个参数接受数组,因为它在原型中被声明为 Variant
。该错误仅发生在声明为 As Double
的第二个参数处,因此 type mismatch
.
WorksheetFunction.doStuff
和 Application.doStuff
之间还有其他已知差异。即:
如果计算出现错误,前者会引发运行时错误。后者只是 returns 一个 错误变体 ,您可以使用
IsError
通过代码检查
以前的功能出现在 Intellisense 中,但非常模糊,几乎没有用。
我总是喜欢通过 Application
对象调用 Excel 函数。