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