Excel VBA删除第6张及以后工作表出现运行时错误1004的原因咨询
运行时错误1004的原因及修复方法
错误原因
- 循环方向错了:你用
For i = 6 To wb.Worksheets.Count正向循环删表,每删一张,后面的工作表索引会自动前移。比如删完第6张,原来的第7张就变成新的第6张,等循环到i=7时,工作表总数已经减少,这时候Worksheets(i)指向的表根本不存在,直接触发1004错误。 - 没指定要删的具体表:直接写
Worksheets.Delete只会删除当前活动的工作表,不是你目标里的第i张表,逻辑完全不对,这是报错的核心原因之一。 - 没处理边界情况:如果工作簿里的工作表总数本来就小于6,循环一开始就会尝试访问不存在的第6张表,直接报错。
修复后的代码
Sub Delete_Sheets() Dim i As Integer Dim wb As Workbook: Set wb = ThisWorkbook ' 先判断有没有需要删的表,没有就直接退出 If wb.Worksheets.Count <= 5 Then Exit Sub Application.DisplayAlerts = False ' 反向循环:从最后一张往第6张删,避免索引混乱 For i = wb.Worksheets.Count To 6 Step -1 wb.Worksheets(i).Delete Next i Application.DisplayAlerts = True End Sub
修复说明
- 改用反向循环:从最后一张表倒序往第6张删,这样删除操作不会影响还没处理的表的索引,不会出现找不到表的情况。
- 明确删除目标:用
wb.Worksheets(i).Delete精准指定要删的第i张表,不再依赖活动表。 - 加边界判断:先检查表的总数是否大于5,避免无意义的循环和错误触发。
内容的提问来源于stack exchange,提问作者2mas
相关产品推荐
相关产品推荐

