我在 vba excel 的用户窗体中有一段代码:
Dim TimeArray() As Variant
TimeArray = Worksheets("Data").Range("E1:E30").Value
MsgBox TimeArray(0)
错误是
"Subscript is out of range"
而我的范围(E1:E3)有数据。
最佳答案
将范围转换为数组是 VBA 中的标准过程。一般来说,当您像这样显式地执行此操作时,VBA 会将其转换为二维数组。因此,要获取第一个值,您必须询问 TimeArray(1, 1)
,因为 Excel 中的单元格从第 1 列和第 1 行开始:
Sub TestMe()
Dim TimeArray() As Variant
TimeArray = Worksheets(1).Range("E1:E30")
MsgBox TimeArray(1, 1)
End Sub
使用 Application.Transpose()
,您可以强制从一列生成一维数组:
Sub TestMeAndTransposeMe()
Dim TimeArray() As Variant
TimeArray = Application.Transpose(Worksheets(1).Range("E1:E30"))
MsgBox TimeArray(1)
Dim i As Long
For i = LBound(TimeArray) To UBound(TimeArray)
Debug.Print i; TimeArray(i)
Next i
End Sub
您可以在此处查看使用 Application.Transpose()
的其他示例:
关于arrays - 在VBA中将范围解析为数组时下标超出范围错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51439360/