繁体   English   中英

数组下标超出范围错误 - 不知道为什么?

[英]Subscript out of range error with an array - no idea why?

我已经将数组声明为Dim rArray() As Variant但是当我尝试使用存储在其中的值时(如下所示),我得到一个下标超出范围错误。 UBound(rArray)LBound(rArray)都返回值 14 和 1,但错误发生在Debug.Print行。

如果我使用如下的 for 语句

For Each rArr in rArray

然后它可以正常工作,但是出于创建此数组的目的,我需要 select 以该顺序存储的每个项目的灵活性 - 这意味着我需要使用下标来引用它们。

我已经尝试了多种方法来尝试解决这个问题,但没有成功,我花了将近半天的时间来解决这个问题。 谁能指出我需要改变什么才能让它工作。

Set rng = Range("D4", Range("D4").End(xlDown))
rng.NumberFormat = "0"
rArray = rng.Value

For x = UBound(rArray) To LBound(rArray) Step -1
    Debug.Print rArray(x)
Next x

编辑:另一个值得一提的事实是,他的数组是在 Function 中声明和使用的,但它不会从 function 传递或传递给 function。 不能在函数中声明和使用 arrays 吗?

当您将工作表值分配给变体数组时,您总是会得到一个基于1的二维数组(例如,1 到某物,1 到某物;0 到某物,0 到某物)。 如果您从单列获取值,则第二个排名仅为 1 比 1。

这可以通过以下来证明。

Dim x As Long, rArray As Variant, rng As Range

Set rng = Range("D4", Range("D4").End(xlDown))
rng.NumberFormat = "0" 'don't really understand why this is here
rArray = rng.Value

Debug.Print LBound(rArray, 1) & ":" & UBound(rArray, 1)
Debug.Print LBound(rArray, 2) & ":" & UBound(rArray, 2)

For x = UBound(rArray, 1) To LBound(rArray, 1) Step -1
    Debug.Print rArray(x, 1)
Next x

所以你需要询问数组第一列的元素; 仅仅要求元素是不够的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM