Hunde, die schellen, beißen nicht.

Guten Tag

Ich habe genau dieses Problem, mit dem Löschen verhindern von einzelnen Tabellenblättern.

Die hier gezeigte Lösung erscheint recht logisch und einfach und wollte es auch in meiner Datei ausprobieren.

Habe den Code so übernommen (im Case-Bereich dann die Tabellenblätter die Benennungen angepasst)

Also:

Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
    On Error Resume Next
    Select Case Sh.CodeName
        Case "tbl_Unternehmen", "tbl_Standorte", "tbl_Zuordnung1", "tbl_Organisationseinheit", "tbl_Zuordnung2", "tbl_Geschaeftsprozesse", "tbl_Zuordnung3", "tbl_Uebungstyp", "tbl_Szenario", "tbl_Verantwortlich", "tbl_Uebungsplanung", "tbl_Zuordnung4"
            MsgBox "Bitte löschen Sie nicht das Tabellenblatt """ & Sh.Name & """!", vbCritical
            ThisWorkbook.Protect
    End Select
End Sub

Nur bei Sh.CodeName gibt es mir für CodeName immer „DieseArbeitsmappe“ an, statt den den eigentlichen Tabellenname.

Was mache ich falsch?

Vielen Dank für einen Tipp

Freundliche Grüsse

####

Hallo Herr W.,

Sie sind in „DieseArbeitsmappe“?

Sie sind im Ereignis: SheetBeforeDelete?

Testen Sie mal am besten in einer anderen, leeren Datei):

Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
	MsgBox Sh.CodeName
        MsgBox TypeName(Sh)
End Sub

Bei mir wird IMMER der Codename des Blattes angezeigt.

Bei Ihnen?

Liebe Grüße Rene Martin

2 Kommentare

  • Tobias

    Ich hab das Problem auch schon gehabt mit dem „nicht löschen“. Aber – soweit ich heraus gefunden habe, es gibt kein richtigen Befehl dazu. Doch wenn man in die Trick-Kiste schaut …

    *Monitor-Aktualisierung -> aus
    * neue Tabelle erstellen
    * Daten kopieren komplett
    * „nicht zu löschende Tabelle“ umbennen in anderen Namen (der nicht so vorkommt)
    * neue Tabelle mit Namen bezeichnen wie sie ursprünglich heißt
    * Hinweis geben evtl
    * Monitor-Aktualisierung -> an

    So sieht es aus, als wäre die Tabelle nie gelöscht worden.

    Bei einer Log-Tabelle von mir sieht das so aus:

    ‚ =====================================================

    ‚ LOG-TABELLE DARF NICHT GELÖSCHT WERDEN
    ‚ (c) Tobias König, Dresden (2026)
    ‚ =====================================================

    Set wsLog = ThisWorkbook.Worksheets(„Log“)

    If Sh.Name = „Log“ Then

    Application.EnableEvents = False
    Dim wsNeu As Worksheet

    EventFalse = True

    ‚ neues Blatt erstellen

    Set wsNeu = ThisWorkbook.Worksheets.Add( _
    After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))

    wsLog.Name = „tmp_______“ ‚altes umbenennen
    wsNeu.Name = „Log“ ’neues als „Log“ benennen

    ‚ Inhalt kopieren
    ThisWorkbook.Worksheets(„tmp_______“).Cells.Copy Destination:=wsNeu.Range(„A1“)

    ActiveWindow.SplitRow = 1
    ActiveWindow.FreezePanes = True

    MsgBox „Die Log-Tabelle darf nicht gelöscht werden.“, vbCritical

    EventFalse = False
    Application.EnableEvents = True
    Exit Sub
    End If

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.