🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Blatt löschen in Excel — ein Arbeitsblatt entfernen ohne Rückfrage und ohne Hänger

|

VBA Blatt löschen in Excel — ein Arbeitsblatt entfernen ohne Rückfrage und ohne Hänger

KurzfassungWorksheet.Delete ist 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 mit Application.DisplayAlerts = False zum 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 — Delete ist 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