【问题标题】:VBA - invalid qualifier when getting array lengthVBA - 获取数组长度时的限定符无效
【发布时间】:2014-10-30 17:02:42
【问题描述】:

我正在尝试创建一个将参数放入数组的函数,然后返回数组的随机索引值。我的代码在arr.Length 获得compile error: invalid qualifier。到目前为止,我有:

Function myFunction(List As Range)
    Dim arr()
    Dim indx

    arr = List
    indx = (Int(Rnd()) * arr.Length)   'error here

    myFunction = indx
End Function

不确定我是正确使用数组还是正确返回值 - 请帮助

修订版 1

将 .length 替换为 ubound 和 lbound - 现在我在单元格中收到 #VALUE 错误,而它应该返回数组的索引值。

Function myFunction(List as Range)

    Dim arr()
    Dim indx as Integer

    arr = List
    indx = Int(Rnd() * (UBound(arr) - LBound(arr) + 1)) 'indx

    myFunction = arr(indx)
End Function

【问题讨论】:

  • VBA 数组没有Length 属性:使用UBound()LBound()
  • 好的,编辑成功了(谢谢)。我遇到了另一个问题,单元格不会返回索引值(请参阅修订版)
  • Dim indx 更改为 Dim indx As Integer
  • @Daniel 这似乎不起作用
  • 当您将范围的值分配给数组时,您会得到一个具有维度(1 到 numberOfRows,1 到 numberOfCols)的二维数组。您需要调整代码,以便正确索引到该数组。目前还不清楚输入范围的形状是什么,因此很难提出具体的建议。

标签: vba excel


【解决方案1】:

当你将 Range 的 Value 赋给一个数组时,你会得到一个维度为 (1 to numberOfRows, 1 to numberOfCols) 的二维数组,因此解决方案是将 arr(indx) 更改为

Function myFunction(List as Range)

    Dim arr()
    Dim indx as Integer

    arr = List
    indx = Int(Rnd() * (UBound(arr) - LBound(arr) + 1)) 'indx

    myFunction = arr(indx,1)
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 2015-05-11
    • 2011-02-24
    相关资源
    最近更新 更多