将单元格区域赋值给数组时出现下标越界错误的技术咨询
VBA数组下标越界问题排查
问题原因
当你将Excel单元格区域直接赋值给Variant数组时,VBA会自动生成二维数组——哪怕你选择的是单行或单列区域。
你的代码中Range("A1:D1")是1行4列的区域,生成的数组维度为(1 To 1, 1 To 4),必须通过数组(行号, 列号)的二维下标格式访问。直接使用单下标myArr(3)会触发"下标越界"错误,因为该数组不存在单下标的访问维度。
解决方法
方法1:使用二维下标正确访问
直接按照数组的二维结构,用行号, 列号的格式取值:
Option Explicit Sub assign_arr_from_range() Dim myArr() As Variant myArr = Range("A1:D1").Value MsgBox myArr(1, 3) ' 对应区域中第1行第3列的单元格(即C1)的值 End Sub
方法2:转换为一维数组
如果需要用单下标访问,可以通过两次Application.Transpose将单行二维数组转为一维数组:
Option Explicit Sub assign_arr_from_range() Dim myArr() As Variant ' 两次转置处理单行区域,得到一维数组(1 To 4) myArr = Application.Transpose(Application.Transpose(Range("A1:D1").Value)) MsgBox myArr(3) ' 直接访问第3个元素,对应C1的值 End Sub
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

