数组下标在VBA中 – 任何人都可以解释这个吗?

请附上我写的一个小testing程序的截图,以说明我遇到的困惑。 我input<>中的文字来解释我所得到的错误。

在这里输入图像描述

MsgBox是为了使程序保持中断模式而创build的,以便我可以看到这些值是什么。

这是代码。 (我已经放弃了早期的版本,但价值应该仍然是相同的)

Sub test() Dim Test1() Dim Test2() 'values hardcoded in the sheet from where this macro is launched 'Cells(7,4) = 1 'Cells(7,5) = 2 'Cells(7,6) = 3 'Cells(7,7) = 4 'Cells(7,8) = 5 'Cells(7,9) = 6 'Cells(7,10) = 7 Set Rng1 = Range(Cells(7, 4), Cells(7, 10)) Test1 = Rng1.Value2 ReDim Test2(4) Test2 = Rng1.Value2 MsgBox ("This was a test program") End Sub 

我的问题

  1. 这是一个单行数组 – 为什么Excel把它作为一个二维数组?
  2. 通常第一行和第一列从0开始,即零。 那么为什么我必须使用1来访问数组所选取的值呢? 或者为什么行0和列0给出错误?
  3. 即使Redim声明强制它有4个值,为什么它会提取第五个值? 这是否意味着如果可能会遇到更多的值,我们不需要担心Redimensioning数组,而Excel将始终满足需要?

非常感谢。

看起来你只是用你设定的范围覆盖你的数组。 之后的代码

 Test2 = Rng1.Value2 

这意味着你的数组不是你可以修改的数组,而是由Excel的Value2属性返回的值的数组,这是一个基于1的二维数组,每个单元格在Rng1一个值。

所以,是的,除非指定,否则数组都是0,但是当返回一个值范围时, Value2属性返回的数组是1。 (如果您在一个单元格上调用Value2而不是单元格范围,则只需获取Variant。)

如果你从一个范围内得到一个数组,它几乎总是一个二维数组。 这是一个例外是一个单元格的范围。

编辑#1

要validationUbound和Lbound,请尝试运行MAIN

 Sub SizeAndShape(ary) MsgBox LBound(ary, 1) & "-" & UBound(ary, 1) & vbCrLf & LBound(ary, 2) & "-" & UBound(ary, 2) End Sub Sub MAIN() Set Rng1 = Range(Cells(7, 4), Cells(7, 10)) Test1 = Rng1.Value2 Call SizeAndShape(Test1) End Sub