在VBA中将范围解析为数组时,下标超出范围错误

时间:2018-07-20 09:26:10

标签: arrays excel vba excel-vba range

我在vba excel中的用户窗体中有一个代码:

Dim TimeArray() As Variant
TimeArray = Worksheets("Data").Range("E1:E30").Value
MsgBox TimeArray(0)

错误是

  

“下标超出范围”

而我的范围(E1:E3)有数据。

1 个答案:

答案 0 :(得分:2)

将范围转换为数组是VBA中的标准过程。通常,当您像这样TimeArray = Worksheets("Data").Range("E1:E30").Value明确地执行此操作时,VBA会将其转换为2D数组。因此,要获取第一个值,您必须询问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()用法的其他示例: