Blattschutz Makro
#1
Servus mal wieder :)

hat von euch jemand ein Makro das man per Tastendruck aktivieren kann das alle Arbeitsblätter sperrt bis auf die Registerkarte "Index"
genauso auch eines zum entsperren.

was sogar besser wäre wenn das makro nur das aktuelle Arbeitsblatt sperrt und entsperrt.

ich hab im moment schon eines am laufen, wenn jedoch der blattschutz aktiv ist kann die index datei nicht mehr automatisch aktualisiert werden.

hoffe ihr habts ne idee, weil dann bin ich endlich durch wenn das problem gelöst ist :)

Gruß und Danke schonmal :)
Top
#2
Hallo,

zum Sperren aller Arbeitsblätter (außer Index)

Code:
Sub prcLion()
   Dim wksBlatt As Worksheet
  
   For Each wksBlatt In ThisWorkbook.Worksheets
      If wksBlatt.Name <> "Index" Then wksBlatt.Protect
   Next wksBlatt

End Sub
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • lion7123
Top
#3
Hallo,

Du kannst auch alle Blätter schützen und per VBA trotzdem Zellen bearbeiten ohne den Schutz aufzuhen.

Dazu muss nur eine Kleinigkeit in Stefans Code ergänzt werden:

Code:
Sub alle_Blätter_schützen()
   Dim wksBlatt As Worksheet
  
   For Each wksBlatt In ThisWorkbook.Worksheets
      wksBlatt.Protect UserInterfaceOnly:=True
   Next wksBlatt

End Sub

Und so aufheben:

Code:
Sub alle_Blätter_Schutz_aufheben()
   Dim wksBlatt As Worksheet
  
   For Each wksBlatt In ThisWorkbook.Worksheets
      wksBlatt.Unprotect
   Next wksBlatt

End Sub
Gruß Atilla
Top
#4
(22.01.2015, 17:21)lion7123 schrieb: ...
was sogar besser wäre wenn das makro nur das aktuelle Arbeitsblatt sperrt und entsperrt.
...

Hi,

hiermit schaltest Du den Blattschutz nur für das aktive Blatt ein.
Code:
Sub BlattschutzAktivesBlattEinschalten()

      ActiveSheet.Protect

End Sub

Aufheben kannst Du den Blattschutz so

Code:
Sub BlattschutzAusschalten()

    ActiveSheet.Unprotect

End Sub

Über eine If... Then-Anweisung kannst Du auch erst prüfen, ob ein Blattschutz gesetzt ist,
und ihn dann ggf. ein- bzw. ausschalten.

So z.B.

Code:
Sub BlattschutzPrüfen()

If ActiveSheet.Protect = True Then
     ActiveSheet.Unprotect
Else
    ActiveSheet.Protect
End If

End Sub

Meiner Meinung nach solltest Du aber den Zugriff auf ungeschützte Zellen beschränken, andernfalls macht
die Aktion wenig Sinn.

Code:
Sub BlattschutzPrüfen2()

If ActiveSheet.Protect = True Then
     ActiveSheet.Unprotect
Else
    ActiveSheet.Protect
    ActiveSheet.EnableSelection = xlUnlockedCells
End If

End Sub

Gruß
Max
[-] Folgende(r) 1 Nutzer sagt Danke an Max für diesen Beitrag:
  • lion7123
Top
#5
Hi Max,

(22.01.2015, 23:40)Max schrieb: Über eine If... Then-Anweisung kannst Du auch erst prüfen, ob ein Blattschutz gesetzt ist, und ihn dann ggf. ein- bzw. ausschalten.

bringt das etwas? Was stört es, wenn ein ungeschütztes Blatt über Makro nochmal entschützt wird? Im anderen Fall, wenn es geschützt ist, würde es durch Dein Makro ja auch wieder geschützt werden, obwohl es das schon ist.

[später] der dritte Satz ("Im anderen Fall...") ist Quatsch, bitte schnell vergessen!
Top
#6
Hallo Max,

(22.01.2015, 23:40)Max schrieb: Meiner Meinung nach solltest Du aber den Zugriff auf ungeschützte Zellen beschränken, andernfalls macht
die Aktion wenig Sinn.

Code:
Sub BlattschutzPrüfen2()

If ActiveSheet.Protect = True Then
     ActiveSheet.Unprotect
Else
    ActiveSheet.Protect
    ActiveSheet.EnableSelection = xlUnlockedCells
End If

End Sub

Müsste im Else-Teil nicht zuerst die EnableSelection-Eigenschaft und danach die Protect-Methode stehen?
Gruß Stefan
Win 10 / Office 2016
Top
#7
(23.01.2015, 18:09)Rabe schrieb: Hi Max,

...

bringt das etwas? ...

Hallo Ralf,

na ja, man braucht halt nur ein Makro, um den Schutz ein- bzw. auszuschalten.

Unabhängig davon habe ich gemerkt, dass mir ein Fehler in meinem Makro unterlaufen ist.
Wenn, wie oben, der Blattschutz nur auf ungeschützte Zellen beschränkt wird, muss bei der
Prüfung auch dieser Zustand abgefragt werden. Andernfalls arbeitet das Makro nicht korrekt.

Code:
Sub BlattschutzPrüfen2()

If ActiveSheet.ProtectContents = True Then
     ActiveSheet.Unprotect
Else
    ActiveSheet.Protect
    ActiveSheet.EnableSelection = xlUnlockedCells
End If

End Sub


.xlsm   Blattschutz.xlsm (Größe: 14,67 KB / Downloads: 3)
Die Zellen A1 und A2 in Tabelle1 sind ungesperrt.

@Stefan
Von der Logik her gebe ich Dir recht, es funzt aber auch so.
Ich habe ein wenig recherchiert, konnte aber keine Erklärung finden.
Vielleicht kennt einer der Mitlesenden die Erklärung.

Grundsätzlich hatte ich mich lediglich eingeklingt weil der TS schrieb, er würde den Blattschutz gerne
nur für das aktive Blatt einschalten wollen.

Gruß
Max

OT-Edit:
Wie erstellt man denn ein Multizitat?
Ich will also in einer Antwort auf mehrere Beiträge antworten.
Top
#8
Hi Max,

(24.01.2015, 10:37)Max schrieb: OT-Edit:
Wie erstellt man denn ein Multizitat?
Ich will also in einer Antwort auf mehrere Beiträge antworten.

rechts vom "Zitieren"-Button gibt es einen kleinen mit einem grünen +, damit kannst Du mehrere Beiträge auswählen. Der Knopf wird dann bei jedem Beitrag rot mit - und wenn Du dann alle hast, dann auf Antworten drücken.
Top
#9
leuts sry das ich so lang nix von mir hörn hab lassen :)

die codes funktionieren alle einwandfrei bis auf das eine von atalia das alle schützt und vba nich behindern soll...

bei mir klappt das zwar nich aber ich hab nun was ich wollte und sag vielen vielen dank :)

Gruß
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste