Schreibschutz per Makro
Die Aufgabe
Mit einfachen Möglichkeiten soll ein einzelnes Arbeitsblatt, die komplette Mappe oder einzelne Blätter einer Mappe gegen versehentliches Überschreiben bzw. unbefugte Änderungen geschützt werden. Da es ja wenig sinnvoll ist, als Passwort Geburtstage oder Namen zu verwenden, ist in den folgenden Code-Mustern ein etwas kryptisches Passwort eingesetzt worden. Trotz des Schutzes wird Excel natürlich die betroffenen Zellen immer dann ändern, wenn eine Berechnung dieses erforderlich macht. Nur der Benutzer kann dort keine Änderungen per Hand vornehmen.
Zugegeben, wer etwas bewanderter ist in Excel und weiß, dass er mit der Tastenkombination AltF11 in den VBA-Editor gelangt kann. Dort ist dann in den meisten Fällen das Passwort leicht auszulesen, solange nicht besondere Schutzmaßnahmen getroffen worden sind. Aber für „Otto Normaluser” sollte beschriebene Weg des Schutzes reichen. Und natürlich darf es auch ein leeres Passwort sein, wenn es nur darum geht, dass irgendwelche Zellen nicht versehentlich überschrieben werden.
Der komplette Schutz eines Blattes ist meistens nicht wünschenswert bzw. sinnvoll. Einzelne Felder oder Bereiche sind vielfach für die Eingabe durch einen Benutzer gedacht. Diese Zellen müssen Sie im Vorwege über das Zahlenformat besonders kennzeichnen. Mehr dazu finden Sie hier im Blog.
Der Code
Hier nun in einem Modul den Code, welcher nach dem Öffnen der Arbeitsmappe (der *.xls*-Datei) automatisch die gesamte Mappe schützt sowie zwei weitere Routinen, wo jeweils (nur) in dem Arbeitsblatt mit dem Namen Tabelle1 der Schutz gesetzt und wieder aufgehoben wird. Änderungen können nach dem einschalten des Schutzes nur noch in den Feldern vorgenommen werden, die durch die Formatierung (Zahlenformat) explizit auf „nicht geschützt” gesetzt worden sind:
Option Explicit Sub Workbook_Open() 'Automatischer Schutz aller Arbeitsblätter der Mappe Dim Ws As Worksheet Set Ws = Activeworksheet For Each Ws In ThisWorkbook.Worksheets Ws.Protect Password:="<Üö.,#'w|F254:;", Next Ws Set Ws = Nothing End Sub Sub SchreibSchutz_An Sheets("Tabelle1").Protect Password:="<Üö.,#'w|F254:;" End Sub Sub SchreibSchutz_Aus Sheets("Tabelle1").Unprotect Password:="<Üö.,#'w|F254:;" End Sub
Code4Import
Den oben stehenden Code sowie verschiedene andere Varianten, wo bestimmte Blätter vom Schutz ausgeschlossen sind, bekommen Sie in dieser Datei. Die Namen der Routinen sind (hoffentlich) selbst erklärend, zusätzlich ist noch eine Kommentarzeile mit Hinweisen eingefügt.
Es versteht sich von alleine, dass Sie das jeweilige Passwort in beiden Modulen Ihren Wünschen entsprechend anpassen müssen und dass es (natürlich) identisch sein muss.