Ich habe ein Makro, das eine Reihe von Arbeitsmappen generiert. Ich möchte, dass die Makros zu Beginn des Laufs prüfen, ob die Datei 2 Tabellen enthält, und sie löschen, falls vorhanden.
Der Code, den ich ausprobiert habe, war:
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
Dieser Code gibt einen Fehler zurück:
laufzeitfehler # 424, Objekt erforderlich.
Ich habe wahrscheinlich die falsche Formatierung, aber wenn es einen einfacheren Weg gibt, wäre es sehr nützlich.
Erwägen:
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
HINWEIS:
Da wir Löschen sind, führen wir die Schleife rückwärts aus.
Versuchen Sie diesen Code:
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
Du könntest benutzen On Error Resume Next
dann müssen nicht alle Blätter in der Arbeitsmappe durchlaufen werden.
Mit On Error Resume Next
Die Fehler werden nicht weitergegeben, sondern unterdrückt. Wenn also die Blätter nicht vorhanden sind oder aus irgendeinem Grund nicht gelöscht werden können, geschieht nichts. Es ist so, als würden Sie sagen: Löschen Sie diese Blätter, und wenn dies fehlschlägt, ist es mir egal. Excel soll das Blatt finden, Sie werden keine Suche durchführen.
Hinweis: Wenn die Arbeitsmappe nur diese beiden Blätter enthält, wird nur das erste Blatt gelöscht.
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