Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1540to1544
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Status Blattschutz feststellen

Status Blattschutz feststellen
17.02.2017 16:52:59
Dietmar
Hallo,
ich würde gerne feststellen wollen, ob ein Register mit Passwort geschützt ist.
Wohlgemerkt, mich interessiert nicht das Passwort, sondern der Schutzstatus.
mit
status = ActiveSheet.ProtectContents
erfahre ich ob das Blatt geschützt ist. Soweit so gut.
Dann versuche ich den Blattschutz aufzuheben. Funktioniert das nicht, dann hat das Blatt einen Passwortschutz. Soweit auch klar.
Aber bei dieser Gelegenheit habe ich den Blattschutz des nicht passwortgeschützten Blattes aufgehoben.
Meine Frage ist also: kann ich per VBA abfragen ob ein Blatt mit/ohne Passwort geschützt ist, ohne den Schutz aufzuheben (falls es ohne Passwort geschützt ist).
Viele Grüße,
Dietmar

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Status Blattschutz feststellen
17.02.2017 17:32:11
onur
Hi,
Du brauchst nur versuchen, blattschutz zu setzen,
Wenn möglich, ist die datei ohne passwortschutz.
Wen geschützt, dann nicht möglich.
Sub Schaltfläche1_Klicken()
Dim wks As Worksheet
For Each wks In Worksheets
On Error Resume Next
wks.Protect ""
wks.Unprotect ""
If wks.ProtectContents Then
MsgBox (wks.Name + " durch Passwort geschützt")
End If
Next wks
End Sub

AW: Status Blattschutz feststellen
17.02.2017 18:03:32
Dietmar
Hallo Onur,
vielen Dank für dein Makro.
Allerdings liefert es das Ergebnis das ich auch schon hatte:
hat das betroffene Blatt einen Blattschutz ohne Passwort, so ist es zum Schluss entschützt.
Das war eigentlich das was ich vermeiden wollte...
Hast du vielleicht noch eine Idee?
Viele Grüße,
Dietmar
Anzeige
AW: Status Blattschutz feststellen
17.02.2017 18:08:44
onur
If not wks.ProtectContents Then next wks
Sub Schaltfläche1_Klicken()
Dim wks As Worksheet
For Each wks In Worksheets
If not wks.ProtectContents Then goto weiter
On Error Resume Next
wks.Protect ""
wks.Unprotect ""
If wks.ProtectContents Then
MsgBox (wks.Name + " durch Passwort geschützt")
End If
weiter:
Next wks
End Sub

AW: Status Blattschutz feststellen
17.02.2017 18:38:39
Dietmar
Hallo Onur,
nochmals Danke, aber das geschützte Blatt (ohne Passwortschutz) ist am Ende dieses Vorschlages auch wieder ohne Blattschutz. Leider ist auch bei dem Vorschlag von Klaus das Ergebnis das gleiche.
Viele Grüße,
Dietmar
Anzeige
AW: Status Blattschutz feststellen
17.02.2017 18:50:54
onur
Mach das mal weg:
wks.Unprotect ""
AW: Status Blattschutz feststellen
17.02.2017 19:07:13
Dietmar
Hallo Onur,
habe ich gemacht. Das hat leider zur Konsequenz, dass jetzt auch das normal geschützte Blatt als Passwort-geschützt angezeigt wird.
Deine 2 Vorschläge sind in meinem Upload enthalten.
Habe selber ein wenig weiter experimentiert (aufgrund eurer Ideen): Makro M1.
Das liefert mir jetzt zwar halbwegs das richtige Ergebnis: das Blatt wird entschützt, geprüft, falls jetzt ungeschützt wieder geschützt mit Protect "". Somit wäre das Blatt wieder geschützt, allerdings hat es jetzt ganz andere Schutzoptionen, als mit denen es ursprünglich geschützt war. :-(
https://www.herber.de/bbs/user/111555.xlsm
Viele Grüße
Dietmar
Anzeige
AW: Status Blattschutz feststellen
17.02.2017 19:23:07
onur
Jetzt aber?
  Dim wks As Worksheet
For Each wks In Worksheets
If Not wks.ProtectContents Then GoTo weiter
On Error Resume Next
wks.Unprotect
If wks.ProtectContents Then
MsgBox (wks.Name + " durch Passwort geschützt")
End If
wks.Protect
' wks.Unprotect "abc"
weiter:
Next wks

AW: Status Blattschutz feststellen
17.02.2017 19:34:04
Dietmar
Hallo Onur,
das führt leider zu dem gleichen Ergebnis: jetzt wird alles richtig erkannt, aber das Blatt, das ohne Passwort geschützt war, wird durch das neue Schützen mit den falschen Optionen geschützt.
Mir fällt nur noch ein: Kopie der Date erstellen, Blattschutz feststellen, Kopie löschen
oder
Datei ohne speichern schließen. Auch so eine Art "Krücke"...
Viele Grüße,
Dietmar
Anzeige
AW: Status Blattschutz feststellen
17.02.2017 23:32:10
onur
Ich habs endlich:

Dim wks As Worksheet
Dim nam()
anz = ThisWorkbook.Sheets.Count
ReDim nam(anz * 2)
For n = 1 To anz
nam(n) = Sheets(n).Name
Sheets(n).Copy After:=Sheets(ThisWorkbook.Sheets.Count)
Next n
For n = 1 To anz
Set wks = Sheets(n + anz)
If Not wks.ProtectContents Then GoTo weiter
On Error Resume Next
wks.Unprotect "aaa"
If wks.ProtectContents Then
MsgBox (Sheets(n).Name + " durch Passwort geschützt")
End If
wks.Protect
weiter:
Next n
Application.DisplayAlerts = False
For n = 1 To 3
Sheets(4).Delete
Next n
Application.DisplayAlerts = True

Anzeige
AW: Status Blattschutz feststellen
17.02.2017 23:51:10
littletramp
Hallo onur
Und was, wenn die Mappe geschützt ist?
Gruss Markus
AW: Status Blattschutz feststellen
18.02.2017 00:13:24
onur
Hi Markus,
Davon war ja nicht die rede; abgesehen davon macht es ja dann keinen sinn zu gucken, ob die einzelnen blätter ein passwort haben oder nicht - oder?
Gruß
Onur
Warum nicht,....
18.02.2017 00:21:32
littletramp
... der Mappenschutz verhindert z. Bsp., dass keine Blätter hinzugefügt oder gelöscht werden können. Und das ist das, was du machst.
Schau dir mal meine Lösung weiter unten an.
Gruss Markus
AW: Status Blattschutz feststellen
17.02.2017 18:11:51
KlausF
Hallo Dietmar,
wenn ich Dich richtig verstanden habe dann könnte es vielleicht so funktionieren:
Sub Check()
MsgBox CheckPass("Tabelle1")
End Sub
Public Function CheckPass(ws As String) As Boolean
Application.Volatile
On Error GoTo ERRHANDLER
ThisWorkbook.ActiveSheet.Unprotect "PasswortIstNichtBekannt"
Exit Function
ERRHANDLER:
CheckPass = True
End Function
Check liefert FALSCH bei Unprotect und Protect ohne Passwort
und WAHR bei Protect mit Passwort
Gruß
Klaus
Anzeige
AW: Status Blattschutz feststellen
17.02.2017 18:39:46
Dietmar
Hallo Klaus,
danke auch dir, aber funktioniert leider auch nicht. Siehe Antwort oben (an Onur).
Viele Grüße,
Dietmar
mit Krücke
17.02.2017 18:55:05
KlausF
Hallo Dietmar,
ist nur eine Krücke:
Nach ThisWorkbook.ActiveSheet.Unprotect "PasswortIstNichtBekannt" ein
ActiveSheet.Protect setzen
Aber Du hast schon recht, es wird natürlich erst einmal entschützt
und danach wieder geschützt. Mit der Krücke fällt das nur nicht so auf ...
Gruß
Klaus
AW: mit Krücke
17.02.2017 19:08:58
Dietmar
Hallo Klaus,
siehe auch meine Antwort oben.
Die "Krücke" funktioniert leider nur bedingt (falsche Schutzoptionen).
Viele Grüße,
Dietmar
Anzeige
AW: Status Blattschutz feststellen
17.02.2017 20:44:50
mumpel
Hallo!
Du könntest mit versteckten Daten arbeiten. In einer versteckten Tabelle in Spalte A die Tabellennamen und in Spalte B eine 1 oder 0. Etwas umständlich, könnte aber funktionieren. Das könnte dann wie folgt aussehen.
Public Sub Test()
 Dim i As Long

 For i = 1 To Worksheets("Tabelle4").Range("A" & Rows.Count).End(xlUp).Row
  If Worksheets("Tabelle4").Cells(i, 1).Offset(0, 1).Value <> 0 Then
     If Worksheets(Worksheets("Tabelle4").Cells(i, 1).Value).ProtectContents = True Then
        Worksheets(Worksheets("Tabelle4").Cells(i, 1).Value).Unprotect "aa"
     Else
        Worksheets(Worksheets("Tabelle4").Cells(i, 1).Value).Protect "aa"
     End If
  End If
 Next i
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

https://www.herber.de/bbs/user/111557.xlsm
Gruß, René
Anzeige
AW: Status Blattschutz feststellen
17.02.2017 21:12:12
littletramp
Hallo Dietmar
So geht es, zwar auch mit "Krücke", aber die Einstellungen bleiben erhalten:
https://www.herber.de/bbs/user/111559.xlsm
Public Sub Demo()
Dim HasPw As Boolean
If Tabelle1.ProtectContents Then
HasPw = SheetHasPassword(ActiveSheet)
MsgBox IIf(HasPw, "Mit Passwort geschützt", "Ohne Passwort geschützt")
Else
MsgBox "Nicht geschützt"
End If
End Sub
Private Function SheetHasPassword(ByRef wsh As Worksheet) As Boolean
Dim pdo As Boolean, pc As Boolean, ps As Boolean
pdo = wsh.ProtectDrawingObjects
pc = wsh.ProtectContents
ps = wsh.ProtectScenarios
On Error Resume Next
wsh.Unprotect "Hier falsches Passwort"
If Err.Number Then
SheetHasPassword = True
Else
On Error GoTo 0
' Blatt wieder schützen
With wsh.Protection
wsh.Protect , _
pdo, _
pc, _
ps, _
True, _
.AllowFormattingCells, _
.AllowFormattingColumns, _
.AllowFormattingRows, _
.AllowInsertingColumns, _
.AllowInsertingRows, _
.AllowInsertingHyperlinks, _
.AllowDeletingColumns, _
.AllowDeletingRows, _
.AllowSorting, _
.AllowFiltering, _
.AllowUsingPivotTables
End With
SheetHasPassword = False
End If
End Function
Gruss Markus
Anzeige
AW: Status Blattschutz feststellen
17.02.2017 21:16:24
littletramp
Ups, noch was zum Anpassen in Sub Demo:
Falsch:

If Tabelle1.ProtectContents Then

Korrekt:

If ActiveSheet.ProtectContents Then

Schöne Lösung. owT
17.02.2017 23:42:15
KlausF
AW: Schöne Lösung. owT
17.02.2017 23:46:15
littletramp
Danke Klaus
AW: Schöne Lösung. owT
18.02.2017 09:52:51
Dietmar
Guten Morgen,
ihr ward noch ganz schön aktiv gestern Abend.
Littletramp, ich habe deine Lösung getestet und das jeweilige geschützte Blatt (ohne Passwort) getestet. Es funktioniert (fast) alles perfekt. Der einzige Unterschied, den das geschützte Blatt nach deiner Überprüfung hat, ist dass die Option "UserInterfaceOnly" danach auf True steht, obwohl sie ursprünglich auf False stand. Das ist aber nicht weiter schlimm, da diese Eigenschaft beim Schließen sowieso verloren geht.
Euch allen nochmal vielen Dank und ein schönes Wochenende,
Dietmar
AW: Schöne Lösung. owT
18.02.2017 10:05:25
littletramp
Hallo Dietmar
Dass UserInterfaceOnly nachher auf True ist, ist beabsichtigt, da du danach per Code, aber nur per Code, gesperrte Zellen bearbeiten kannst, ohne das Blatt zu entschützen. Versuche es mal.
Weshalb man in diesem Forum diese Option, anstelle des Entschützen und wieder Schützen der Blätter, nicht mehr propagandiert, ist für mich schleierhaft (Unkenntnis?).
Gruss Markus
AW: Schöne Lösung. owT
18.02.2017 11:17:40
Dietmar
Hallo Markus,
ich selber nutze die Option UserInterfaceOnly sehr gerne, da sie deutlich einfacher ist als, wie du schon sagst, Schutz aufheben, Schutz setzen.
Aber meine Anfangserfahrungen damit waren sehr ernüchternd: es hat eine ganze Weile gedauert hat, bis ich mal nachgelesen hatte, dass diese Option flüchtig ist, d.h. nach dem Schließen der Datei weg ist. Ich dachte immer, die Option hat eine Macke. Seit ich weiß wie sie sich verhält, finde ich sie sehr hilfreich. Und genau dafür kann man deine Funktion auch hervorragend benutzen, denn nur UserInterfaceOnly beim Öffnen der Mappe zu setzen reicht nicht, da die anderen Optionen damit kaputt gemacht werden (außer man hat den "Standardschutz" = was Excel von sich aus anbietet) benutzt.
Vielleicht haben wir ja jetzt einige neue Fans von "UserInterfaceOnly" gewonnen, nicht zuletzt deiner Funktion wegen.
Viele Grüße
Dietmar
Das stimmt einfach nicht! Diese Option wird ...
18.02.2017 16:23:44
Luc:-?
…auch in diesem Forum immer wieder mal vorgeschlagen, littletramp,
nur wachsen nicht nur neue Frager, sondern auch neue Antworter nach, die das dann wohl tatsächlich nicht kennen. Deshalb muss man Antworten (AWn) in Foren ja auch immer etwas kritisch sehen — der Frager weiß ja meist nicht, wie kompetent die AW bzw der AWer ist, und er sollte keinesfalls auf die Archiv-Recherche verzichten, wenn er eine optimale und nicht nur irgendeine Lösung haben will!
Gruß, Luc :-?
Besser informiert mit …

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige