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

标签 arrays vba excel range

我在 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/

相关文章:

excel - 条件总和

c - 从C程序中的子程序返回数组

excel - 我应该如何格式化我的单元格以获得项目符号列表

带有特殊字符的 Excel 到 CSV?

Excel VBA 函数将非空单元格与用户定义的分隔符连接起来

Excel VBA 调用 Bloomberg 终端并输入查询,如何在代码中正确输入证券的黄键/市场部门?

vba - word中上一个标题的文本

C-排序大型2D整数数组的最快方法

javascript - 如果名称作为变量给出,如何访问多维数组的成员值

c# - 如何在 C# 中填充数组?