繁体   English   中英

使用 VBA 在 Excel 中删除工作表

[英]Delete worksheet in Excel using 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

此代码返回错误:

运行时错误 #424,需要对象。

我可能有错误的格式,但如果有更简单的方法来做到这一点,那将非常有用。

考虑:

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

笔记:

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

试试这个代码:

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

您可以使用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
Worksheets("Sheet1").Delete
Worksheets("Sheet2").Delete

在你的 if 语句中试试这个:

Application.DisplayAlerts = False
Worksheets(“Sheetname”).Delete
Application.DisplayAlerts = True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM