Excel VBA:删除工作表

Excel VBA: Delete Sheets

提问人:2mas 提问时间:11/14/2023 更新时间:11/14/2023 访问量:70

问:

Sub Delete_Sheets()


Dim i As Integer
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet

Application.DisplayAlerts = False

For i = 6 To wb.Worksheets.Count

       Worksheets.Delete
       
Next i

Application.DisplayAlerts = True

End Sub

我正在尝试从第 6 张开始删除工作簿中的所有工作表(前五张始终保留)。

为什么这会给我运行时 erorr 1004?

Excel VBA

评论

1赞 Darren Bartrup-Cook 11/14/2023
Worksheets是工作簿中所有工作表的集合,在代码中,它还引用代码运行时处于活动状态的任何工作簿。尝试。wb.Worksheets(i).Delete

答:

1赞 Xabier 11/14/2023 #1

考虑注释并添加 Case 语句,以确保您的前 5 个工作表按名称明确排除在删除之外:

Sub Delete_Sheets()
Dim i As Integer
Dim wb As Workbook: Set wb = ThisWorkbook
 
Application.DisplayAlerts = False

For i = wb.Worksheets.Count To 6 Step -1
    Select Case wb.Worksheets(i).Name
        Case "Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5"
            'Do nothing for the 5 worksheets named above
        Case Else
            wb.Worksheets(i).Delete
    End Select
Next i

Application.DisplayAlerts = True

End Sub

评论

0赞 chris neilsen 11/14/2023
是什么让您认为 OP 的前 5 张纸保留了它们的默认名称?为什么这很重要?
0赞 Xabier 11/14/2023
@chrisneilsen 我想我只是假设添加一个额外的层来确保你不会丢失一些东西对 OP 有用,但你是对的,这是一个假设,可能不需要,....
0赞 hennep 11/14/2023
@chris_neilsen,按名称检查工作表是个好主意。用户可以更改工作表的顺序或添加工作表。
0赞 chris neilsen 11/15/2023
@hennep re 按名称检查工作表是个好主意:1) 这不是 OP 要求的 2) 用户也可以更改工作表名称 3) 同时做(名称和索引)不是一个好主意。选择一个。
-1赞 iDevlop 11/14/2023 #2

您可以尝试以下操作:

For i = 6 To wb.Worksheets.Count  
       Worksheets(6).Delete 'yes: 6 don't 'fix' that answer
Next i