arrays - VBA 中的数组下标 - 谁能解释一下?

标签 arrays vba excel

请附上我写的一个小测试程序的截图,以说明我遇到的困惑。 <> 中的文本是我输入的,以解释我遇到的错误。

enter image description here

创建 MsgBox 是为了使程序处于中断模式,以便我可以看到值是什么。

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

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

我的问题
  • 它是一个单行数组 - 那么为什么 Excel 将它作为一个二维数组呢?
  • 通常第一行和第一列从 0 开始,即零。那么为什么我必须使用 1 来访问数组选择的值呢?或者为什么第 0 行和第 0 列会出错?
  • 即使Redim语句强制它有 4 个值,为什么它会选择第五个值?这是否意味着如果可能遇到更多值并且 Excel 将始终执行必要的操作,我们不必担心重新调整数组的大小?

  • 提前非常感谢。

    最佳答案

    如果你从一个范围中得到一个数组,它几乎总是一个二维数组。唯一的异常(exception)是作为单个单元格的区域。

    编辑#1 :

    要验证 Ubounds 和 Lbounds,请尝试运行 主要 :

    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
    

    关于arrays - VBA 中的数组下标 - 谁能解释一下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22689600/

    相关文章:

    excel - vb.net Crystal 报表 Excel 颜色

    arrays - 如何基于2D索引和1D值向量替换Numpy 3D数组中沿z轴的值

    VBA:使用未声明的变量?

    arrays - 使用 Excel 计算每日平均值

    excel - 如何确定VBA中使用的最后一行(包括之间的空格)

    vba - 如何取消保护 Excel 工作簿

    excel - 查找与一列中的键匹配的值,然后将其应用为键以从第三列返回值

    excel - 如何使用 Excel 中的“保存”对话框保存 SQL 文件

    c - 在C中的结构中存储多个数组

    javascript - Redux:在 2D 数组上使用 Spread 运算符