[英]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.