Excel VBA运行错误,下标越界,求问哪里有问题?
打开的工作表中应该还存在其他不适 xxx日格式的工作簿名称,没有删完全,通过下标来获取sheets,如果值操作包含日的工作簿,用下面的
for k=1 to j
if instr(wb.Sheets(k).Name,"日")<>0 then'''''''''''
workbooks("2017数据").sheets(1).cells(x,1)=wb.Sheets(k).cells(32,11)
end if
x=x+1
next k
注释掉所有On Error Resume Next语句,在VBA IDE中运行,
出错后点击调试,光标会停在出错的那条语句处,
或者
事先在怀疑可能有逻辑错误的语句处设置断点,运行经过断点时中断,
此时可以在立即窗口中使用
?变量名
或
?函数名(函数参数)
或
过程名(参数)
辅助调试。
x=2写到循环外面了
那些日报的最后一个工作表并不是“xx日”命名的,当你用Sheets.Count来循环时,最后会出现找不到工作表,就报错了。
出现错误是因为你用wb.Sheets.Count方法获取到的工作表数包含了“x日”的数和”sheetx“工作表的数,该数与你实际想要获得的数目不符,出现索引越界现象
解决办法是:
删除文件中多余的sheet类型的表,你需要把后面的sheet1……之类的没有的工作表删除掉才行,仅保留与x日有关的表
如果问题解决的话请采纳吧~
下标越界错误解题大概方向:
1.引用了不存在的数组元素。
2.声明数组时没有指定元素的数目。
3.引用了不存在的集合成员。 试着使用 For Each...Next 结构代替指定元素下标。
使用速写形式的下标,结果指定了错误的元素。
4.下标越界不存在对应的工作薄、工作表名称是否写正确。
如果在运行 Excel VBA 代码时遇到下标越界的错误,可能是因为你的代码尝试访问数组或集合的一个不存在的下标。例如,如果你尝试访问一个长度为 10 的数组的第 11 个元素,就会发生下标越界的错误。
为了解决这个问题,需要检查你的代码,找到导致下标越界的语句,并确保下标值在有效范围内。例如,在上面的例子中,下标值应该在 0 到 9 之间。
此外,你还需要注意下标是否被正确地计算,例如,是否使用了正确的循环变量或数组大小,或者是否避免了数据类型转换的问题。
如果你无法找到导致下标越界的问题,可以尝试使用调试功能来查看代码的执行流程,或者使用错误处理代码来捕获并处理异常。