Excel VBA - 使用单维数组的下标超出范围

时间:2012-08-30 18:07:09

标签: excel-vba vba excel

这是一个非常简单的问题,但我已经打了一个小时。我正在尝试执行以下操作:

  1. 从我的电子表格中的命名区域定义VBA数组
  2. 访问该数组中的项目
  3. 现在,如果命名范围恰好覆盖多维区域(行和列),那么这样可以正常工作:

    foobar = Range("two_dimensional_range")
    MsgBox foobar(1,1)
    

    但是,如果命名范围由单个维度(仅一列)数据组成,则会产生“下标超出范围”错误:

    foobar = Range("one_dimensional_range")
    MsgBox foobar(1)
    

    我已经证实foobar真的是一个数组。我可以使用For Each ... Next迭代它。如果我调用Ubound(foobar),它会给我正确的大小。我只是无法直接访问它的单个元素!

    我做错了什么?

1 个答案:

答案 0 :(得分:6)

当你为一个变量数组指定一个范围(不是单个单元格)时,它将始终是一个多维数组,所以这个MsgBox foobar(1,1)仍然可以在第二个实例中工作。

参见此示例

Option Explicit

Sub Sample()
    Dim Ar As Variant

    Ar = Range("A1:A2")

    Debug.Print Ar(1, 1)
    Debug.Print Ar(2, 1)
End Sub

另一个例子

Option Explicit

Sub Sample()
    Dim Ar As Variant

    Ar = Range("A1:B2")

    '~~> Get Values from Col A
    Debug.Print Ar(1, 1)
    Debug.Print Ar(2, 1)

    '~~> Get Values from Col B
    Debug.Print Ar(1, 2)
    Debug.Print Ar(2, 2)
End Sub