Excel VBA - 下标超出一维数组的范围
Posted
技术标签:
【中文标题】Excel VBA - 下标超出一维数组的范围【英文标题】:Excel VBA -- Subscript out of range with single-dimension array 【发布时间】:2012-08-30 18:07:09 【问题描述】:这是一个非常简单的问题,但我已经为此头疼了一个小时。我正在尝试执行以下操作:
-
从我的电子表格中的命名范围定义 VBA 数组
访问该数组中的项目
现在,如果命名范围恰好覆盖了多维区域(行和列),那么这可以正常工作:
foobar = Range("two_dimensional_range")
MsgBox foobar(1,1)
但是,如果命名范围由单个维度(只是一列)数据组成,则会产生“下标超出范围”错误:
foobar = Range("one_dimensional_range")
MsgBox foobar(1)
我已经验证 foobar 确实是一个数组。我可以用 For Each ... Next 遍历它。如果我调用 Ubound(foobar) 那么它会给我正确的大小。我只是不能直接访问它的单个元素!
我做错了什么?
【问题讨论】:
【参考方案1】:当您将范围(不是单个单元格)分配给变量数组时,它将始终是多维数组,因此此 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
【讨论】:
以上是关于Excel VBA - 下标超出一维数组的范围的主要内容,如果未能解决你的问题,请参考以下文章
打印来自 For Each 函数 VBA 的数组结果得到下标超出范围错误