gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:07:55 26 4
gpt4 key购买 nike

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

如果我使用如下的 for 语句

For Each rArr in rArray

然后它就可以正常工作,但为了创建这个数组,我需要灵活地选择按该顺序存储的每个项目 - 这意味着我需要使用下标引用它们。

我尝试了多种方法来解决这个问题,但没有成功,并且花了几乎半天的时间来解决这个问题。谁能指出我需要更改什么才能使其正常工作。

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

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

最佳答案

当您将工作表值分配给变体数组时,您总是最终得到一个基于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

所以需要求数组第一行的元素;仅仅要求元素是不够的。

关于arrays - 数组的下标超出范围错误 - 不知道为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30812181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com