Excel: Makro ausführen trotz Blattschutz

Nightfly09

sudo
Registriert
Apr. 2009
Beiträge
14.529
Hallo zusammen,

ich habe seit einigen Tagen ein Problem mit einer neu erstellten Excel Datei. Da mit der Datei sehr oft Leute arbeiten müssen, deren Kenntnisse im Umgang mit Excel gegen Null tendieren, wollte ich einen Blattschutz setzen, um die Möglichkeiten in der Datei Unsinn anzustellen etwas einzuschränken.
Ich habe also nach Fertigstellung der Datei folgendes Makro hinzugefügt:
Code:
Sub Workbook_Open()

Worksheets("Tabelle1").Protect Password:="XXX", UserInterfaceOnly:=True
Worksheets("Tabelle1").Activate

End Sub

Theoretisch sollte mir diese Art von Blattschutz erlauben weiterhin andere Makros auszuführen, allerdings wurde ich sehr schnell von einer Fehlermeldung begrüßt:
"Die Zelle oder das Diagramm, die bzw. das Sie ändern möchten, befindet sich auf einem schreibgeschützten Blatt. Um eine Änderung vorzunehmen, heben Sie den Schutz des Blatts auf. Möglicherweise werden Sie aufgefordert, ein Kennwort einzugeben."

Ich habe mir dabei noch nicht viel gedacht und einfach vor jedes Makro einen Befehl gesetzt, um den Blattschutz zu entfernen:
Code:
Worksheets("Tabelle1").Unprotect Password:="XXX"

Der Fehler kam beim Ausführen vom ersten Makro allerdings direkt wieder und erst nach einem Klick auf "Ok", wurde dann der Blattschutz entfernt. Der Unprotect Befehl befindet sich in jeder Sub direkt in der ersten Zeile (nach dem "Sub" natürlich). Ich kann mir daher nicht erklären, wie die Fehlermeldung zustande kommt.
Verwendet wird aktuell MS Office 2016, da die Datei aber auf verschiedenen Rechnern genutzt wird, wäre es wünschenswert, wenn der Code auch zu älteren Excel Versionen noch kompatibel wäre.

Es wäre schön, wenn sich hier ein Excel Spezi findet, der mir da eventuell weiter helfen kann.

Ps.: Folgenden Befehl habe ich auch bereits versucht und er führte zum gleichen Ergebnis.
Code:
ActiveSheets.Unprotect Password:="XXX"
 
Hier sind vielleicht Änderungen im Trust Center erforderlich.
ExcelTrustCenter.jpg
 
Nein, es sollte keine Aenderung im Trust-Center notwendig sein.
Eigentlich sollte das von dir beschriebene auch funktionieren.
Pack mal an den Anfang und Ende noch:
Code:
Application.DisplayAlerts = false
...
Application.DisplayAlerts = true

Bzw. werden auch wirklich immer alle notwendigen Blaetter entsperrt?
 
Änderungen im Trust Center sind leider keine Option, wenn es daran liegt, werde ich eine andere Lösung finden müssen.

Ich habe vorerst zum testen nur ein Tabellenblatt gesperrt, wenn dieses wie gewünscht entsperrt ist, sollte es mit den anderen keine Probleme geben.

Die Fehlermeldung scheint sich mit Application.DisplayAlerts auch nicht unterdrücken zu lassen, in der entsprechenden Sub hat es bei mir keinen Effekt und selbst wenn ich pominent in Workbook_Open auf "false" stelle, kommt die Meldung noch.

Trotzdem schon mal Danke für die Ansätze.
 
Zuletzt bearbeitet:
Kannst du eine Dummy-Datei hochladen (kein Inhalt nur die nicht funtkionierende Funktion)?

Ich hatte es auch schon mal so umgesetzt und es hat funktioniert.
 
Werde ich bei Gelegenheit gerne mal machen, das wird allerdings eine Weile dauern, da ich in den kommenden zwei Wochen vermutlich nur selten die Möglichkeit haben werde, an der Datei zu basteln und weil es vermutlich schon ein etwas größerer Aufwand wird, die Datei in einen Zustand zu versetzen, wie ich sie dann auch verschicken kann.
Bis dahin muss ich wohl darauf setzen, dass auch ohne Blattschutz keiner zu viel Unsinn damit anstellt. (Ich ahne schon, dass es nach hinten los geht.)
 
Im Endeffekt musst du nur alle Blaetter entfernen und bei dem mit dem Blattschutz den Inhalt.
Bei den Makros kann man analog vorgehen. Alle Entfernen und dann eine Funktion erstellen (oder eine alte Kopieren und inhaltlich alles entfernen) und irgendetwas in eine Schreibgeschuetzte Zelle schreiben.
 
Funktioniert es denn, wenn du den Code in Einzelschritten durchgehst (also im VBA Editor mal eine Haltemarke (F9) direkt am Anfang setzen und dann mit F8 durch die Code-Zeilen durchklicken? Ich hatte einige Male das Phänomen, dass es in Einzelschritten tadellos klappt und dann bei der Code-Ausführung doch wieder hing.

Und setzt du den Blattschutz nur an dieser einen Stelle beim Workbook.Open-Event oder auch am Ende von Prozeduren? Ich vermute Mal, dass du auch in einigen Makros den Blattschutz wieder setzt, sonst wäre der ja nach der Makro-Ausführung prinzipiell nicht gesetzt (bis du die Mappe erneut öffnest). Vielleicht rufst du mit Prozedur 1 eine weitere Prozedur 2 auf und diese sperrt bereits das Blatt bevor du zu Prozedur 1 zurückkehrst und dort den restlichen Code ausführst.
 
Entschuldigt bitte die späte Rückmeldung und danke an alle, die versucht haben zu helfen, das Problem ist gelöst.

Das setzen vom Blattschutz per VBA, nur für das UI hat sich als gute Lösung herausgestellt, die mit bisher noch nicht bekannt war. Als netten Nebeneffekt, brauche ich den Blattschutz in den Makros jetzt auch nicht mehr aufheben.
Code:
Worksheets("Tabelle1").Protect Password:="XXX", UserInterfaceOnly:=True
 
  • Gefällt mir
Reaktionen: Scientist
Zurück
Oben