如何返回数组元素的值?VB代码报Subscript out of range错误求助
解决VB数组下标越界问题
你遇到的「Subscript out of range」错误,核心原因是从Range区域赋值得到的数组是二维数组——哪怕你只选了单列数据,它的结构也是(行索引, 列索引)的二维格式,而非你以为的一维数组。
修复方法一:用双下标访问二维数组
直接保留二维数组结构,访问时指定行和列的下标(单列数据的列索引固定为1):
Sub test() Dim arr As Variant arr = Range("a1", "a6").Value a = LBound(arr, 1) ' 明确取第一维(行)的下界 b = UBound(arr, 1) ' 明确取第一维(行)的上界 For i = a To b MsgBox arr(i, 1) ' 二维数组需同时指定行、列下标 Next End Sub
修复方法二:转成一维数组再访问
如果习惯用单下标操作,可以用Application.Transpose把单列的二维数组转成一维数组:
Sub test() Dim arr As Variant arr = Application.Transpose(Range("a1", "a6").Value) ' 转成一维数组 a = LBound(arr) b = UBound(arr) For i = a To b MsgBox arr(i) Next End Sub
补充说明
Range.Value返回的数组默认是基于1的索引,比如你选A1:A6,数组的范围是arr(1 to 6, 1 to 1)。原代码里用arr(i)访问时,VB会默认补全第二个下标为0,但数组的列索引下界是1,所以直接触发下标越界错误。
内容的提问来源于stack exchange,提问作者the_current_thing
相关产品推荐
相关产品推荐

