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