Ich hab mal nachgedacht. Das Sportlichste bei mir zu Hause ist der Läufer im Flur.

Tabellenblätter in Excel in Excel haben nicht nur einen (sichtbaren) Namen, der vom Anwender oder von der Anwenderin geändert werden kann. Im VBA-Editor gibt es auch noch einen Name (Codename), der nur dort und nur per Hand geändert werden kann. Ich kann nun per Programmierung leicht überprüfen, ob alle Tabellen, die ich benötige, noch vorhanden sind. Ich habe eine Funktion GibtEsTabellenblatt geschrieben, die überprüft, ob die aktuelle Datei ein Tabellenblatt mit einem solchen Codenamen hat. Ich möchte die Arbeitsmappe nicht schützen, weil der Anwender oder die Anwenderin neue Blätter hinzufügen, löschen, umbenennen darf. Allerdings: meine Blätter dürfen nicht gelöscht werden. Ich sehe nach:

Jedes der Tabellenblätter hat ein Ereignis BeforeDelete:

Dieses Ereignis hat allerdings kein Abbruchkriterium (Cancel), mit dem man das Löschen verhindern könnte.

Der zweite Blick fällt auf das Objekt Workbook. Gibt es dort ein Abbruchparameter?

Das Ereignis dort heißt SheetBeforeDelete und hat auch keinen solchen Parameter:

Allerdings einen Parameter Sh mit dem ich gezielt überprüfen kann, welches Blatt nicht gelöscht werden darf (und die Liste schnell erweitern kann:

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

End Select

Problem: Die Meldung wird angezeigt und DANN das Blatt gelöscht. Doof!

Nächster Versuch: Und wenn ich DANACH die Arbeitsmappe schütze?

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

Klappt! Hier die drei Meldungen, die erscheinen:

Allerdings: DANN ist die Arbeitsmappe geschützt. Was ich ja eigentlich nicht wollte. Also flux den Arbeitsmappenschutz wider aufheben. Wo? Am besten beim Wechseln auf ein anderes Arbeitsblatt:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    On Error Resume Next
    ThisWorkbook.Unprotect
End Sub

Je größer der Dachschaden, desto freier der Blick zu den Sternen.

In der letzten Excelschulung rief mich eine Teilnehmerin zu sich, weil sie nicht mehr sortieren und filtern konnte:

Die Antwort war schnell gefunden: Sie hatte zwei Tabellenblätter markiert:

Warum? Wir hatten zuvor gelernt, dass man in großen Tabellen schnell mit [⇑] + [Strg] + [↓] (beziehungsweise den anderen drei Pfeiltasten/Cursortasten markieren kann. Sie hatte fälschlicherweise gedrückt: [⇑] + [Strg] + [Bild↓]. Damit wird zum aktuellen Tabellenblatt das nächste hinzugruppiert.

Paradox ist, wenn einer sich im Handumdrehen den Fuß bricht.

Hallo Herr Martin,

ich weiß nicht, was passiert ist: Ich habe eine Tabelle in Excel angelegt:

Die neue Tabelle

Die neue Tabelle

Ich wollte nun ein neues Tabellenblatt einfügen – und nun das:

???

???

Die Antwort: Wenn Sie genau hinsehen, haben Sie nicht ein neues Blatt, sondern ein Diagramm eingefügt. Wahrscheinlich wollten Sie die Tastenkombination [Shift] + [F11] drücken, haben aber nur [F11] gedrückt. löschen Sie das Diagramm und versuchen es noch einmal!

Die Antwort

Die Antwort