这是一个非常简单的问题,但我已经打了一个小时。我正在尝试执行以下操作:
现在,如果命名范围恰好覆盖多维区域(行和列),那么这样可以正常工作:
foobar = Range("two_dimensional_range")
MsgBox foobar(1,1)
但是,如果命名范围由单个维度(仅一列)数据组成,则会产生“下标超出范围”错误:
foobar = Range("one_dimensional_range")
MsgBox foobar(1)
我已经证实foobar真的是一个数组。我可以使用For Each ... Next迭代它。如果我调用Ubound(foobar),它会给我正确的大小。我只是无法直接访问它的单个元素!
我做错了什么?
答案 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