You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:37:47