使用VBA在Excel中删除工作表

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)

注意:

因为我们正在删除,所以我们向后运行循环.


R.K*_*aan 9

试试这段代码:

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)


dee*_*dee 6

您可以使用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)