Excel VBA读取Range转数组时触发下标越界(错误9)问题求助
问题原因与解决方法
当你将Excel单列区域赋值给Variant变量时,得到的是二维数组(行×列),而非一维数组。哪怕是单列区域,数组结构也是(行索引, 列索引),你的Q50:Q60区域对应数组维度为(1 To 11, 1 To 1),直接用单下标访问必然触发下标越界错误。
解决方法一:使用二维下标访问
直接按照二维数组的结构,指定行和列的索引读取值:
Public Sub test() Dim TestRange As Variant TestRange = Worksheets("test_worksheet").Range("Q50:Q60").Value ' 访问第2行、第1列的元素(对应原区域Q51单元格) MsgBox CStr(TestRange(2, 1)) End Sub
解决方法二:转换为一维数组
通过Application.Transpose将二维数组转成一维数组,即可用单下标访问:
Public Sub test() Dim TestRange As Variant ' 转置为一维数组 TestRange = Application.Transpose(Worksheets("test_worksheet").Range("Q50:Q60").Value) ' 直接用单下标访问第2个元素 MsgBox CStr(TestRange(2)) End Sub
补充说明
Excel的Range.Value返回的数组,默认第一维度对应行,第二维度对应列。使用LBound(TestRange)或UBound(TestRange)时,默认只获取第一维度(行)的边界值,所以你之前看到的1和11是行索引范围,列索引始终从1开始,因此必须明确指定两个下标才能正确访问元素。
内容的提问来源于stack exchange,提问作者Expolarity
相关产品推荐
相关产品推荐

