Cla*_*ric 17 excel vba excel-vba
我有一个生成许多工作簿的宏.我希望宏在运行开始时检查文件是否包含2个电子表格,如果存在则删除它们.
我试过的代码是:
If Sheet.Name = "ID Sheet" Then
Application.DisplayAlerts = False
Sheet.Delete
Application.DisplayAlerts = True
End If
If Sheet.Name = "Summary" Then
Application.DisplayAlerts = False
Sheet.Delete
Application.DisplayAlerts = True
End If
Run Code Online (Sandbox Code Playgroud)
此代码返回错误:
运行时错误#424,需要对象.
我可能有错误的格式,但如果有更简单的方法,这将是非常有用的.
Gar*_*ent 35
考虑:
Sub SheetKiller()
Dim s As Worksheet, t As String
Dim i As Long, K As Long
K = Sheets.Count
For i = K To 1 Step -1
t = Sheets(i).Name
If t = "ID Sheet" Or t = "Summary" Then
Application.DisplayAlerts = False
Sheets(i).Delete
Application.DisplayAlerts = True
End If
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
注意:
因为我们正在删除,所以我们向后运行循环.
试试这段代码:
For Each aSheet In Worksheets
Select Case aSheet.Name
Case "ID Sheet", "Summary"
Application.DisplayAlerts = False
aSheet.Delete
Application.DisplayAlerts = True
End Select
Next aSheet
Run Code Online (Sandbox Code Playgroud)
您可以使用On Error Resume Next它,而无需遍历工作簿中的所有工作表。
随着On Error Resume Next误差不传播,而是被抑制。因此,在这些表不存在或由于任何原因无法删除时,什么也没有发生。就像您会说:删除此工作表,如果失败,我不在乎。Excel应该可以找到工作表,您将不会进行任何搜索。
注意:当工作簿仅包含这两张纸时,则仅第一张纸将被删除。
Dim book
Dim sht as Worksheet
set book= Workbooks("SomeBook.xlsx")
On Error Resume Next
Application.DisplayAlerts=False
Set sht = book.Worksheets("ID Sheet")
sht.Delete
Set sht = book.Worksheets("Summary")
sht.Delete
Application.DisplayAlerts=True
On Error GoTo 0
Run Code Online (Sandbox Code Playgroud)