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
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
danke für den Workaround – sehr interessant!
LG :: Rene