nko*_*ren 3 excel vba excel-vba
这是一个非常简单的问题,但我已经打了一个小时.我正在尝试执行以下操作:
现在,如果命名范围恰好覆盖多维区域(行和列),那么这很好:
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),它会给我正确的大小.我只是无法直接访问它的单个元素!
我究竟做错了什么?
当您为变量数组指定范围(不是单个单元格)时,它将始终是一个多维数组,因此此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)