我知道已经有很多与此主题相关的主题,但是我仍然找不到在这种情况下可行的解决方案。以下两个子选项始终使我出现“下标超出范围”错误。
Sub test1()
Dim Arr() As Variant
Arr= Range("A1:A10")
MsgBox Arr(0)
End Sub
Sub test1()
Dim Arr As Variant
Arr= Range("A1:A10").Value
MsgBox Arr(0)
End Sub
答案 0 :(得分:4)
编辑为清楚起见,请参阅以下评论。
将范围的值分配给Variant变量将导致该变量包含按行和列索引(按此顺序)的基于变量的一维2D数组,或者包含范围的实际值(如果为1)单元格范围。
在您的特定情况下,这将起作用:
Sub test1()
Dim Arr As Variant
Dim row As Long
Dim col As Long
row = 1
col = 1
Arr = Range("A1:A10").Value
MsgBox Arr(row, col)
End Sub
在更通用的方法中,如果您的下游代码希望处理数组,但是您的范围有可能覆盖单个单元格,则即使在这种情况下,也可以按照以下方式强制使用数组:
Sub test2()
Dim rng As Range
Dim Arr As Variant
Dim row As Integer
Dim col As Integer
row = 1
col = 1
Set rng = Range("A1:A1") '<== 1 cell only!
Arr = rng.Value
'Ensure we're dealing with an array even in this case.
If Not IsArray(Arr) Then
ReDim Arr(1 To 1, 1 To 1) As Variant
Arr(1, 1) = rng.Value
End If
MsgBox Arr(row, col)
End Sub