提问人:2mas 提问时间:11/14/2023 更新时间:11/14/2023 访问量:70
Excel VBA:删除工作表
Excel VBA: Delete Sheets
问:
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?
答:
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
上一个:比较日期,并将数据放在日期下
下一个:复制范围而不是单元格
评论
Worksheets
是工作簿中所有工作表的集合,在代码中,它还引用代码运行时处于活动状态的任何工作簿。尝试。wb.Worksheets(i).Delete