arrays - 在 VBA 中将范围解析为数组时下标超出范围错误
问题描述
我在 vba excel 的用户表单中有一个代码:
Dim TimeArray() As Variant
TimeArray = Worksheets("Data").Range("E1:E30").Value
MsgBox TimeArray(0)
错误是
“下标超出范围”
而我的范围(E1:E3)有数据。
解决方案
将范围转换为数组是 VBA 中的标准过程。通常,当您像这样显式执行此操作时TimeArray = Worksheets("Data").Range("E1:E30").Value
,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()
:
推荐阅读
- teradata - Teradata NORMALIZE 选项
- python - 防止在 Altair Chart 中连接线
- html - Materialize CSS 下拉菜单在 Blazor(服务器端)中不起作用
- firebase - 单击按钮时,Vue js 不会获取路由参数。从 Firestore 更新用户
- sql - 根据现有结果获取派生状态列的最佳方法是什么
- odoo - 如何在odoo 13的pdf报告中显示日期?
- android - 很抱歉,在此服务器上找不到请求的 URL
- sql - 按特定顺序对表列进行排序
- libreoffice - 将 Excel VBA 移植到 LibreOffice:AddressOf
- xml - 使用 xmlstarlet 将数百个 XML 文档转换为具有不同列数的表