【问题标题】:Why does this VBA index statement give an error?为什么这个 VBA 索引语句会出错?
【发布时间】:2017-07-23 18:10:39
【问题描述】:

在 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 对象本身似乎没有“索引”方法。然而代码有效。任何想法为什么?

物有所值,

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

同样失败并出现错误 13。

【问题讨论】:

    标签: vba excel worksheet-function


    【解决方案1】:

    通过WorksheetFunctionApplication 调用的Excel 函数应该执行相同的操作,但它们在许多方面有所不同,因为它们是在不同的时间和不同的团队编写的。 p>

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

    WorksheetFunction.doStuffApplication.doStuff 之间还有其他已知差异。即:

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

    • 通过代码检查它
    • 以前的函数出现在 Intellisense 中,但非常模糊,几乎没用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 2015-05-15
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      相关资源
      最近更新 更多