Excel 为什么 运行时错误9 下标越界
Excel中vba提示下标超界,说明对象不存在或者数组元素不存在。
举个简单的例子:工作表中没有"1月"这个工作表,却用Sheets("1月");数组定义的是arr(1 to 10),却用Arr(11),都会出现下标越界的提示。
简单的理解:下标越界就是引用超出了所在的范围。
1、当我们在excel的VBA中输入下面代码,运行,就会出现“运行时错误9下标越界”的提示。代码如下:
Sub a()
Dim arr() As String
arr(1) = "你好"
End Sub
2、其实上面的“运行时错误9下标越界”是因为定义的动态数组没有确定维数和尺寸。定义成固定维数和尺寸的,或用Redim界定一下维数和尺寸即可解决此问题。
改正后的代码如下:
Sub a()
Dim arr() '定义一个动态数组
Dim i As Integer
ReDim arr(1 To 3) '定义一个3个元素的数组,并且对数组进行初始化
arr(1) = 3
arr(2) = 4
arr(3) = 5'在下面语句重新定义一个10个元素的数组,清除前面的元素,并重新分配新的存储变量
ReDim arr(1 To 10)
For i = 1 To 10
arr(i) = i
Next i
End Sub,就可以了
扩展资料:
VB中的数组越界
引用了不存在的数组元素。
下标可能比下标范围大或小,或是在应用程序中这一边的数组没有指定范围。检查数组的声明以确认其上界和下界。若使用的是重新指定范围的数组,应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查变量名的拼写。
声明数组时没有指定元素的数目。例如,下列的代码就会导致此错误:
Dim MyArray() As Integer
MyArray(8) = 234 ' 导致错误 9。
Visual Basic 并不会将没有指定范围的数组自动设为 0 – 10。相反必须使用 Dim 或 ReDim 来指定数组中元素的数目。
引用了不存在的集合成员。
试着使用 For Each...Next 结构代替指定元素下标。
使用速写形式的下标,结果指定了错误的元素。
参考资料来源:百度百科-下标越界
2017-05-09
1、引用了不存在的数组元素:下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。
2、声明数组时没有指定元素的数目:引用了不存在的集合成员。
3、使用速写形式的下标,结果指定了错误的元素。
4、引用或操作的工作薄、工作表不存在。
下面三条语句有相同的功能,使Sheet1成为当前活动表
Sheets("Sheet1").Select '错误,此种方法在Excel2007中出错,但一些资料显示可以这样使用代码名Sheet1来引用
Sheets("abc").Select '正确,此方法中的abc是工作表标签名称,由于此名称可能被修改,所以在VBA宏程序中不赞成使用
Sheets(1).Select '正确,此方法中的数字序号是在Excel工作簿下实际看到的工作表排列顺序序号,在宏程序中不赞成使用
Sheets(Sheet1.Name).Select '正确,此方法使用代码名Sheet1的Name属性来引用,适合在VBA宏程序中使用
希望对你有所帮助~
比如,出错时显示i为5,那么检查test5月表名中是否包含空格及其他会导致错误的情况。
或者,根本就没有test5月这张表。
代码没看出问题
msgbox msgSheetName