Clever-Excel-Forum

Normale Version: [Blattschutz] Worauf achten?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe aktuell folgendes Problem: Sobald ich nur Zellen freischalte, die tatsächlich auch durch den Nutzer bearbeitet werden sollen, blockiert der Blattschutz gleichzeitig meine ganzen Makros in der Arbeitsmappe.

Mag mir jemand sagen oder vielleicht sogar eine nützliche Quelle nennen, wie ich meine Arbeitsmappe schützen kann, SODASS alle Makros weiterhin funktionieren.

Ich weiß es gibt die Funktion Sheet("").Protect und Sheet("").Unprotect. Muss ich diese beiden Befehle nun, vor jedem VBA Schnipsel setzen?

Vielen Dank im Voraus.

Gruß

Ricci
Hi,

vor der Code-Ausführung den Blattschutz aufheben, danach wieder setzen.

Siehe auch hier: https://www.business-wissen.de/artikel/e...ktivieren/
Hallo

konkret auf den Code beaogen so: direkt NACH Sub Dein_Code den Befehl Unprotect und VOR End Sub den Befehl Protect. Geht mit und OHNE Passwort.

mfg Gast 123
Hallöchen,

den Blattschutz aufzuheben hat eventuell auch den Nachteil, dass bei Abbruch durch Fehlermeldungen das Programmende mit dem Setzen nicht erreicht wird.
Da kann man mit einer gezielten Fehlerverarbeitung nachhelfen, oder schaue mal in die Suche und suche nach "UserInterface" ... Das wäre eine weitere Variante.
Einfach verzichten auf Blatt'schutz'.
Zitat:Einfach verzichten auf Blatt'schutz'.
... und ein Makro schreiben, was eventuelle Änderungen rückgängig macht, wo nix geändert werden soll 15
Vielen Dank für eure Antworten!

Ich sehe darin das Problem, da ich auf meinem Tabellenblatt mit vielen XVerweisen und im Makro selbst mit vielen Bezügen auf andere Tabellenblätter arbeite.
Ich habe bereits versucht mit Sheet("").Unprotect und Sheet("").Protect zu arbeiten. Allerdings stieß ich so immer wieder auf, nicht ausführbaren Code durch den Blattschutz. Obwohl ich diese Befehle direkt nach Sub ... und Vor End Sub gesetzt habe.

Mir fällt es also schwer zu erkennen, wann ich welches Blatt öffnen und sperren muss. Ich habe auch schon daran gedacht, mit einer Funktion einfach ALLE Blätter zu entsperren und nach dem Makro wieder zu sperren. Dies stelle ich mir aber nicht unbedingt performant vor.

Zitat:oder schaue mal in die Suche und suche nach "UserInterface" ... Das wäre eine weitere Variante.

Danke, werde ich mir gleich anschauen!

Zitat:[size=medium]... und ein Makro schreiben, was eventuelle Änderungen rückgängig macht, wo nix geändert werden soll [img]
Dateiupload bitte im Forum! So geht es: Klick mich!
]
Ist das der Way to go? In einem Video habe ich von der Vorgehensweise auch schon gesehen.

Gruß

Ricci
Hallöchen,

also, wenn Du statt dem Blattschutz ein ÄnderungenRückgängigMachenMakro nehmen willst, ist das wohl etwas wie mit den Kanonen und den Spatzen. Wenn man z.B. nur versehentliche Änderungen verhindern will, ist der Schutz aus meiner Sicht die bessere Variante.

Den Schutz überall rauszunehmen und wieder zu setzen ist hinsichtlich der Performance kein Problem. Du musst nur eben schauen, dass der Schutz beim Speichern wieder drin ist - siehe meine Anmerkung zu abgebrochenen Makros. Da könnte man z.B. im BeforeSave (siehe Ereignismakros in DieseArbeitsmappe) über alle betreffenden Blätter gehen ...

Wenn die Daten auf verschiedenen Blättern sind, ist die nächste Frage, ob die Anwender dort drauf gehen. Wenn nicht, dann blende die Blätter aus und verzichte, wie von snb vorgeschlagen, zumindest dort auf den Blattschutz.
Moin!
Ich komme mal auf Andrés UserInterface zurück.
Wenn Du beim Öffnen der Mappe alle Blätter mit gesetztem Parameter UserInterfaceOnly:=True schützt,
• kann VBA-Code trotzdem ändern ohne den Schutz aufzuheben
• brauchst Du Dich nicht um Programmabstürze zu sorgen, es kann eben nicht vorkommen, dass ein Blatt versehentlich ungeschützt ist
https://learn.microsoft.com/de-de/office...et.protect

Mal quick & dirty.
Code gehört in DieseArbeitsmappe:
Code:
Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
  ws.Protect "Dein Passwort", UserInterfaceOnly:=True
Next
End Sub

Gruß Ralf
Ralf und  schauan vielen Dank!

Die Funktion UserInterfaceOnly ist es gewesen. Nun funktioniert alles wie es soll!