下标超出范围错误与数组 - 不明白为什么?

Abh*_* O. 8 arrays excel vba excel-vba

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

如果我使用如下的for语句

For Each rArr in rArray
Run Code Online (Sandbox Code Playgroud)

然后它没有问题,但为了我创建这个数组的目的,我需要灵活地选择按顺序存储的每个项目 - 这意味着我需要使用下标来引用它们.

我已经尝试了多种方法来尝试解决这个问题而没有运气,并且在这一个问题上花了将近一半的时间.任何人都可以指出我需要改变什么才能让它发挥作用.

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
Run Code Online (Sandbox Code Playgroud)

编辑:另一个值得一提的事实是,他在一个函数中声明并使用了数组,但它不是从函数传递给函数.不能在函数中声明和使用数组吗?

小智 7

当你将工作表值分配给一个变量数组时,你总是得到一个基于1的二维数组(例如1到1,1到1; 从不 0到0,到0).如果您从单个列获取值,则第二个Rank仅为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
Run Code Online (Sandbox Code Playgroud)

所以你需要在数组的第一个等级中要求元素; 仅仅要求元素是不够的.