Удалить рабочий лист в 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

Этот код возвращает ошибку:

ошибка времени выполнения # 424, требуемый объект.

Возможно, у меня неправильное форматирование, но если есть более простой способ сделать это, это будет очень полезно.

Ответ 1

Рассмотрим:

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

Примечание:

Поскольку мы удаляем, мы запускаем цикл назад.

Ответ 2

Попробуйте этот код:

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

Ответ 3

Вы можете использовать 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

Ответ 4

Worksheets("Sheet1").Delete
Worksheets("Sheet2").Delete

Ответ 5

попробуйте это в ваших операторах if:

Application.DisplayAlerts = False
Worksheets("Sheetname").Delete
Application.DisplayAlerts = True