3

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

  1. 从我的电子表格中的命名范围定义一个 VBA 数组
  2. 访问该数组中的项目

现在,如果命名范围恰好覆盖了多维区域(行和列),那么这可以正常工作:

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

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

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

我已经验证 foobar 确实是一个数组。我可以用 For Each ... Next 遍历它。如果我调用 Ubound(foobar) 那么它会给我正确的大小。我只是不能直接访问它的单个元素!

我究竟做错了什么?

4

1 回答 1

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
于 2012-08-30T18:33:49.800 回答