Kurzfassung —
Worksheet.Deleteist die einzige Blattoperation, die zum Nachfragen unterbricht. Es wirft eine modale Bestätigung — jene, die sagt, dass Daten vorhanden sein könnten — und in einem unbeaufsichtigten Makro oder einer Schleife ist dieser Dialog ein Hänger, kein Sicherheitsnetz. Bringen Sie ihn mitApplication.DisplayAlerts = Falsezum Schweigen und schalten Sie ihn in einem Fehlerhandler wieder ein, damit ein Absturz die Meldungen nie für die ganze Sitzung ausgeschaltet lässt. Daraus folgen zwei harte Grenzen: Excel weigert sich, das letzte sichtbare Blatt zu löschen (Fehler 1004), und das Löschen per Index in einer Schleife überspringt Blätter, sofern Sie nicht rückwärts laufen.
Sub DeleteSheetSafely(nm As String)
Dim ws As Worksheet
On Error GoTo Done
Application.DisplayAlerts = False
For Each ws In ThisWorkbook.Worksheets
If StrComp(ws.Name, nm, vbTextCompare) = 0 Then ws.Delete
Next ws
Done:
Application.DisplayAlerts = True ' wiederhergestellt, auch wenn Delete einen Fehler warf
End Sub
Worksheet.Delete ist die Code-Fassung von Rechtsklick auf ein Register ▸ Löschen. So reißt ein Makro
Scratch-Blätter oder die Arbeitsregister des Vormonats vor einem frischen Lauf ab. Anders als
Add und Copy, die ihre Arbeit still verrichten, hält
Delete an und wartet auf einen Menschen — und diese Pause ist die Wurzel fast jedes
Blatt-Löschen-Problems.
Was Sie lernen
- Das Denkmodell —
Deleteist unumkehrbar und fragt zuerst, und die Frage ist es, die Ihr Makro aufhängt - Die wichtigste Regel — die Rückfrage zum Schweigen bringen, dann in einem Fehlerhandler wiederherstellen
- Warum Excel sich weigert, das letzte sichtbare Blatt zu löschen
- Warum das Löschen in einer Schleife Blätter überspringt, und wie rückwärts laufen das behebt
- Wie Sie ein Blatt nur löschen, wenn es existiert
Das Denkmodell: Delete fragt zuerst, und es gibt kein Rückgängig
Zwei Tatsachen über Delete erklären den Rest. Erstens ist es endgültig — es gibt kein Rückgängig
für ein gelöschtes Blatt, die Daten und alles auf dem Register sind also in dem Moment weg, in dem der
Aufruf gelingt. Zweitens, genau weil es endgültig ist, bewacht Excel es mit einem modalen
Bestätigungsdialog: „Data may exist in the sheet(s) selected for deletion. To permanently delete the
data, press Delete."
In einer interaktiven Sitzung ist dieser Dialog ein hilfreicher Sicherheitsgurt. In der Automatisierung ist er der Feind. Ein Makro, das zehn Scratch-Blätter löscht, wirft diese Rückfrage zehnmal, und läuft das Makro unbeaufsichtigt — über Nacht, auf einem Server, aus einer geplanten Aufgabe —, friert es schlicht ein und wartet auf einen Klick, der nie kommt. Die ganze Kunst des Blattlöschens in VBA besteht darin, diese Frage sicher abzuschalten.
Die wichtigste Regel: die Rückfrage zum Schweigen bringen, dann wiederherstellen
Unterdrücken Sie die Bestätigung mit Application.DisplayAlerts = False und — das ist die wichtige
Hälfte — schalten Sie sie in einem Fehlerhandler wieder ein. Die Meldungen ausgeschaltet zu lassen
ist keine lokale Bequemlichkeit — es ist eine globale Einstellung, die für den Rest der Excel-Sitzung aus
bleibt und jede Bestätigung zum Schweigen bringt, auch die Rückfrage „Möchten Sie diese Datei
überschreiben?". Stirbt Ihr Makro zwischen dem Ausschalten der Meldungen und dem Wiedereinschalten, haben
Sie still die ganze Anwendung entschärft.
Sub ClearScratchSheets()
On Error GoTo Done
Application.DisplayAlerts = False
ThisWorkbook.Worksheets("Scratch").Delete
Done:
Application.DisplayAlerts = True ' laeuft immer, auch bei Fehler
End Sub
Das ist dieselbe Disziplin, die Sie bei ScreenUpdating und rund um
Unprotect nutzen: Jede globale Einstellung, die Sie ausschalten, wird an
einem einzigen Ausgangs-Label wiederhergestellt, sodass ein Absturz die Sitzung nicht in einem
gefährlichen Zustand hinterlassen kann. Wenn Sie sich über das Löschen von Blättern nur eine Sache merken,
dann diese: DisplayAlerts in einem Handler wiederherstellen.
Excel weigert sich, das letzte sichtbare Blatt zu löschen
Eine Arbeitsmappe muss immer mindestens ein sichtbares Blatt enthalten, Delete auf dem letzten
sichtbaren wirft also den Laufzeitfehler 1004 — sogar bei unterdrückten Meldungen. Das beißt in dem
Moment, in dem Sie „lösche jedes Blatt, das auf X passt" schreiben und X zufällig auf alle passt, oder
„lösche alle Blätter außer dem Bericht", wenn der Bericht nicht dort ist, wo Sie annahmen.
Sichern Sie die Untergrenze ausdrücklich ab, bevor Sie löschen:
If ThisWorkbook.Worksheets.Count > 1 Then
ws.Delete
Else
MsgBox "Cannot delete the only remaining sheet."
End If
Beachten Sie, dass ausgeblendete Blätter nicht zur Anforderung „mindestens eines sichtbar" zählen, eine Arbeitsmappe mit einem sichtbaren und mehreren ausgeblendeten Blättern weigert sich also weiterhin, das sichtbare zu löschen. Müssen Sie es entfernen, blenden Sie zuerst ein anderes Blatt ein.
Warum das Löschen in einer Schleife Blätter überspringt
Hier ist die Falle, die aus „lösche diese fünf Blätter" ein „lösche zwei, überspringe drei, dann Fehler"
macht. Wenn Sie die Sammlung per Index durchlaufen und im Gehen löschen, verschiebt jede Löschung die
späteren Indizes um eins nach unten — Sheets(i) zeigt nach einer Löschung also auf das, was vorher
Sheets(i+1) war, und Ihr For i = 1 To Count läuft geradewegs daran vorbei:
' FALSCH - Loeschen verschiebt die Indizes, Blaetter werden uebersprungen
For i = 1 To ThisWorkbook.Worksheets.Count
ThisWorkbook.Worksheets(i).Delete ' i zeigt jetzt hinter das naechste Blatt
Next i
Zwei saubere Lösungen. Laufen Sie rückwärts, sodass das Verschieben nur in dem Teil geschieht, den Sie bereits besucht haben — derselbe Grund, aus dem Sie Zeilen von unten nach oben löschen (siehe VBA Zeilen löschen):
For i = ThisWorkbook.Worksheets.Count To 1 Step -1
With ThisWorkbook.Worksheets(i)
If .Name Like "Temp*" Then .Delete
End With
Next i
Oder nutzen Sie For Each, was hier sicher ist, weil es über die Objekte iteriert statt über feste
Indexpositionen — das ist die Form, die das Kurzfassungs-Snippet verwendet. So oder so: Löschen Sie nie,
während Sie einen Index vorwärts zählen.
Wie ExcelMaster hilft
Ein Blatt zu löschen sieht trivial aus und verbirgt vier Arten zu scheitern: eine modale Rückfrage, die
einen unbeaufsichtigten Lauf aufhängt, ein global ausgeschaltetes DisplayAlerts nach einem Absturz,
Fehler 1004 auf dem letzten sichtbaren Blatt und eine Vorwärtsschleife, die die Hälfte ihrer Ziele
überspringt.
ExcelMaster lässt Sie sagen, was
entfernt werden soll — „lösche jedes Blatt, dessen Name mit Temp beginnt, aber niemals das letzte" — und
schreibt die sichere Fassung: DisplayAlerts aus mit einer garantierten Wiederherstellung in einem
Fehlerhandler, ein Zählwächter für die Untergrenze des letzten sichtbaren Blatts und eine
Rückwärtsschleife oder For Each, damit nichts übersprungen wird. Es erinnert Sie außerdem daran, dass
das Löschen endgültig ist, und bietet an, stattdessen den Inhalt eines Blatts zu leeren, wenn Sie etwas
Umkehrbares wollen. Sie behalten die Arbeitsmappe und den Code.
Häufig gestellte Fragen
Wie lösche ich in VBA ein Blatt ohne die Bestätigungsrückfrage?
Setzen Sie Application.DisplayAlerts = False vor dem Löschen und stellen es danach mit
Application.DisplayAlerts = True wieder her — idealerweise an einem Fehlerhandler-Label, damit es auch
läuft, wenn das Löschen scheitert. Bei unterdrückten Meldungen entfernt
ThisWorkbook.Worksheets("Scratch").Delete das Blatt still.
Warum friert mein Makro beim Löschen eines Blatts ein?
Weil Delete einen modalen Bestätigungsdialog wirft und das Makro auf einen Klick wartet, der nie kommt
— häufig bei unbeaufsichtigten oder geplanten Läufen. Unterdrücken Sie den Dialog mit
Application.DisplayAlerts = False rund um das Löschen. Denken Sie daran, ihn wieder einzuschalten, da er
sonst für die ganze Excel-Sitzung aus bleibt.
Warum bekomme ich beim Löschen eines Arbeitsblatts Fehler 1004?
Meist, weil es das letzte sichtbare Blatt ist und eine Arbeitsmappe mindestens ein sichtbares Blatt
behalten muss. Prüfen Sie ThisWorkbook.Worksheets.Count > 1 vor dem Löschen, oder blenden Sie zuerst ein
anderes Blatt ein. Beachten Sie, dass Fehler 1004 hier von der Bestätigungsrückfrage getrennt ist — das
Unterdrücken von DisplayAlerts hebt die Untergrenze des letzten Blatts nicht auf.
Wie lösche ich ein Blatt nur, wenn es existiert?
Es gibt keine Exists-Methode, durchlaufen Sie also die Worksheets-Sammlung und vergleichen die Namen
mit StrComp(ws.Name, nm, vbTextCompare) = 0, wobei Sie bei einer Übereinstimmung löschen. Das tut
anmutig nichts, wenn das Blatt fehlt, statt einen Fehler zu werfen, wie es ein direktes
Worksheets("Gone").Delete täte.
Wie lösche ich mehrere Blätter in einer Schleife?
Laufen Sie rückwärts per Index — For i = Worksheets.Count To 1 Step -1 — oder nutzen Sie For Each,
denn das Löschen, während Sie einen Index vorwärts zählen, verschiebt die späteren Indizes und
überspringt Blätter. Unterdrücken Sie DisplayAlerts für den Stapel und sichern Sie die Zählung des
letzten sichtbaren Blatts ab, damit die letzte Löschung nicht 1004 wirft.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 14.09.2026.
Verwandte Anleitungen: VBA Blatt hinzufügen · VBA Blatt kopieren · VBA DisplayAlerts · VBA Zeilen löschen · VBA Fehlerbehandlung
