gibt es eine möglichkeit per vba herauszufinden, ob ein tabellenblatt mit passwort geschützt ist?
danke
alex
Sub schutz()
MsgBox ActiveSheet.Protect
End Sub
Sub test()
Msgbox check_protect("Tabelle1")
End Sub
Function Check_Protect(wks As String) As Boolean
If Worksheets(wks).ProtectContents = True Then Check_Protect = True
End Function
Sub unPro_WKS()
Dim getPw As String
Select Case Check_PW("Tabelle1", "")
Case 1
getPw = InputBox("Bitte Passwort eingeben", "Passwort")
ActiveSheet.Unprotect getPw
Case 2
MsgBox ("Falsches Passwort")
Exit Sub
Case 3
MsgBox "Kein Passwort vorhanden gewesen"
Case 4
MsgBox "Unbekannter Passwortfehler"
End Select
End Sub
Function Check_PW(wks As String, strPw As String) As Variant
On Error GoTo myerrorhandler
Dim myErr As Integer
'Prüfung ob Passwort vorhanden
If strPw = "" Then
myErr = 1
ActiveSheet.Unprotect ""
'Wenn es funktioniert hat ohne Passwort
myErr = 3
ElseIf strPw <> "" Then
'Prüfung mit übergebenem Passwort
myErr = 2
ActiveSheet.Unprotect strPw
End If
Exit Function
myerrorhandler:
Select Case myErr
Case 1
'Passwort auf Tabelle vorhanden
Check_PW = 1
Case 2
'Falsches Passwort
Check_PW = 2
Case 3
'Unbekannter Passwort Fehler
Check_PW = 4
End Select
End Function
Sub test()
MsgBox Sheets("Tabelle1").ProtectContents
End Sub
Sub test()
'Message am Bildschirm zeigen
Draw_msg
'anhalten zum kucken :-)
MsgBox "stop"
'sonstiger Code
'Nachricht löschen
myMsgBox.Delete
End Sub
Function Draw_msg()
Dim L As Double, T As Double, W As Double, H As Double
W = 600
H = 50
L = Round((Application.Width - W) / 1.5, 0)
T = Round(Application.Height / 2, 0)
Set myMsgBox = ActiveSheet.Shapes.AddShape(msoShapeRectangle, L, T, W, H)
With myMsgBox
.Name = "Nachricht"
.Fill.ForeColor.SchemeColor = 22
.TextFrame.Characters.Text = "Bitte warten, übernehme die Daten aus dem Internet"
.TextFrame.VerticalAlignment = xlVAlignCenter
.TextFrame.HorizontalAlignment = xlHAlignCenter
.DrawingObject.RoundedCorners = msoTrue
.DrawingObject.Font.Bold = -1
.DrawingObject.Font.ColorIndex = 1
.DrawingObject.Font.Size = 22
.DrawingObject.Font.FontStyle = "Fett"
End With
End Function
In diesem Abschnitt zeige ich dir, wie du per VBA herausfinden kannst, ob ein Tabellenblatt in Excel geschützt ist. Die folgenden Schritte helfen dir, dies zu überprüfen:
Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
Neues Modul einfügen: Klicke mit der rechten Maustaste auf dein Projekt im Projekt-Explorer, gehe zu Einfügen und wähle Modul.
Code einfügen: Füge den folgenden VBA-Code in das Modul ein:
Sub schutz()
MsgBox ActiveSheet.Protect
End Sub
Makro ausführen: Schließe den VBA-Editor und führe das Makro aus, um zu sehen, ob das aktive Blatt geschützt ist (es zeigt "True" oder "False" an).
Erweiterte Funktion: Wenn du den Schutz für ein spezifisches Blatt überprüfen möchtest, kannst du den folgenden Code verwenden:
Function Check_Protect(wks As String) As Boolean
Check_Protect = Worksheets(wks).ProtectContents
End Function
Und rufe diese Funktion in einem anderen Sub auf:
Sub test()
MsgBox Check_Protect("Tabelle1")
End Sub
Fehler: "Objekt nicht gefunden"
Lösung: Überprüfe, ob der Blattname korrekt eingegeben wurde.
Fehler: "Typen unverträglich"
Lösung: Stelle sicher, dass du den korrekten Datentyp verwendest (z.B. String für Blattnamen).
Fehler: VBA gibt "False" zurück, obwohl das Blatt geschützt ist.
Lösung: Vergewissere dich, dass du die ProtectContents-Eigenschaft verwendest, um den Schutzstatus korrekt zu überprüfen.
Zusätzlich zu den oben beschriebenen Methoden gibt es verschiedene Ansätze, um den Blattschutz zu überprüfen:
Direkt über die Sheet-Eigenschaften:
Sub test()
MsgBox Sheets("Tabelle1").ProtectContents
End Sub
Verwendung von InputBox für Passwortabfragen: Wenn du ein Makro schreibst, das den Blattschutz aufhebt, kannst du eine InputBox verwenden, um das Passwort abzufragen.
Sub unPro_WKS()
Dim getPw As String
getPw = InputBox("Bitte Passwort eingeben", "Passwort")
ActiveSheet.Unprotect getPw
End Sub
Hier sind einige praktische Beispiele, die dir helfen, das Konzept besser zu verstehen.
Beispiel 1: Einfacher Schutz-Check
Sub checkSheetProtection()
If ActiveSheet.ProtectContents Then
MsgBox "Das Blatt ist geschützt."
Else
MsgBox "Das Blatt ist nicht geschützt."
End If
End Sub
Beispiel 2: Passwortabfrage
Sub unlockSheet()
Dim password As String
password = InputBox("Gib das Passwort ein:")
On Error Resume Next
ActiveSheet.Unprotect password
If Err.Number <> 0 Then
MsgBox "Falsches Passwort!"
Else
MsgBox "Blatt erfolgreich entsperrt."
End If
On Error GoTo 0
End Sub
Modularer Code: Halte deinen Code modular, indem du Funktionen für häufig genutzte Aufgaben erstellst. So bleibt dein Code übersichtlich und wartungsfreundlich.
Fehlerbehandlung: Implementiere Fehlerbehandlung, um unerwartete Ergebnisse besser zu handhaben.
Dokumentation: Kommentiere deinen Code ausgiebig, um anderen (oder dir selbst in der Zukunft) zu helfen, den Zweck jeder Funktion zu verstehen.
1. Kann ich auch prüfen, ob ein Passwort für den Blattschutz existiert?
Leider ist dies mit VBA nicht direkt möglich. Du kannst jedoch versuchen, das Blatt ohne Passwort zu entsperren und dann den Status zu überprüfen.
2. Was passiert, wenn ich das falsche Passwort eingebe?
Wenn du ein falsches Passwort eingibst, wird ein Fehler generiert. Du solltest Fehlerbehandlung implementieren, um den Benutzer zu informieren.
3. Welche Excel-Version benötige ich für diese Codes?
Die meisten der genannten Codes funtkionieren in Excel 2010 und späteren Versionen, da die VBA-Funktionalitäten dort weitgehend gleich sind.