Registriert seit: 14.06.2022
Version(en): Office 365
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
Registriert seit: 10.04.2014
Version(en): Microsoft 365, mtl. Kanal
Hi,
vor der Code-Ausführung den Blattschutz aufheben, danach wieder setzen.
Siehe auch hier:
https://www.business-wissen.de/artikel/e...ktivieren/
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Folgende(r) 1 Nutzer sagt Danke an WillWissen für diesen Beitrag:1 Nutzer sagt Danke an WillWissen für diesen Beitrag 28
• ricci
Registriert seit: 12.03.2016
Version(en): Excel 2003/ 2016
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
Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:1 Nutzer sagt Danke an Gast 123 für diesen Beitrag 28
• ricci
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 2 Nutzer sagen Danke an schauan für diesen Beitrag:2 Nutzer sagen Danke an schauan für diesen Beitrag 28
• ricci, DIZA
Registriert seit: 29.09.2015
Version(en): 2030,5
Einfach verzichten auf Blatt'schutz'.
Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• ricci
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Zitat:Einfach verzichten auf Blatt'schutz'.
... und ein Makro schreiben, was eventuelle Änderungen rückgängig macht, wo nix geändert werden soll
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• ricci
Registriert seit: 14.06.2022
Version(en): Office 365
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
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• ricci
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
05.02.2023, 18:12
(Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2023, 18:13 von RPP63.)
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.protectMal 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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 2 Nutzer sagen Danke an RPP63 für diesen Beitrag:2 Nutzer sagen Danke an RPP63 für diesen Beitrag 28
• ricci, DIZA
Registriert seit: 14.06.2022
Version(en): Office 365
05.02.2023, 19:06
(Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2023, 19:07 von ricci.)
Ralf und schauan vielen Dank!
Die Funktion UserInterfaceOnly ist es gewesen. Nun funktioniert alles wie es soll!