【问题标题】:Subscript is out of Range Error when Parsing Range to Array in VBA在 VBA 中将范围解析为数组时下标超出范围错误
【发布时间】:2018-07-20 17:41:28
【问题描述】:

我在 vba excel 的用户表单中有一个代码:

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

错误是

“下标超出范围”

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

【问题讨论】:

  • 你给数组赋值的方式意味着数组的LBound值是=1而不是0。

标签: arrays vba excel range


【解决方案1】:

将范围转换为数组是 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() 用法的其他示例:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2015-08-07
    • 2017-06-16
    • 2014-04-20
    相关资源
    最近更新 更多