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

nko*_*ren 3 excel vba excel-vba

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

  1. 从我的电子表格中的命名区域定义VBA数组
  2. 访问该数组中的项目

现在,如果命名范围恰好覆盖多维区域(行和列),那么这很好:

foobar = Range("two_dimensional_range")
MsgBox foobar(1,1)
Run Code Online (Sandbox Code Playgroud)

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

foobar = Range("one_dimensional_range")
MsgBox foobar(1)
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

Sid*_*out 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
Run Code Online (Sandbox Code Playgroud)

另一个例子

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