Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1816to1820
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

Blattschutz über alle Excel-Dateien

Blattschutz über alle Excel-Dateien
11.03.2021 10:50:57
Björn
Hallo,
ich habe das Excel 2019.
Ich möchte mehrere Dateien in einem Ordner automatisiert mit Blattschutz versehen und wieder aufheben können. Das Passwort ist immer gleich.
Das Thema gab es schonmal hier:
https://www.herber.de/forum/archiv/1268to1272/1270826_Blattschutz_ueber_alle_ExcelDateien_eines_Ordners.html
Ich habe diese Lösung genommen:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Sub schutzAn()
protectAllSheets "E:\Forum", "DeinPasswort", True
End Sub
Sub schutzAus()
protectAllSheets "E:\Forum", "DeinPasswort", False
End Sub
Sub protectAllSheets(Directory As String, Password As String, Protection As Boolean)
Dim objWB As Workbook, objSH As Worksheet
Dim strFile As String, strDir As String
Dim lngCalc As Long
On Error GoTo ErrExit
With Application
.ScreenUpdating = False
.EnableEvents = False
lngCalc = .Calculation
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
strDir = IIf(Right(Directory, 1) = "\", Directory, Directory & "\")
strFile = Dir(strDir & "*.xls*", vbNormal)
Do While strFile  ""
If strDir & strFile  ThisWorkbook.FullName Then
Set objWB = Workbooks.Open(strDir & strFile, UpdateLinks:=False)
For Each objSH In objWB.Worksheets
If Protection Then
objSH.Protect Password
Else
objSH.Unprotect Password
End If
Next
objWB.Close True
End If
strFile = Dir
Loop
ErrExit:
With Err
If .Number  0 Then
MsgBox "Fehler in Prozedur:" & vbTab & "'protectAllSheets'" & vbLf & String(60, "_") & _
vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
"Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
.Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
"VBA - Fehler in Modul - Modul1"
.Clear
End If
End With
On Error GoTo 0
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = lngCalc
.DisplayAlerts = True
End With
Set objWB = Nothing
Set objSH = Nothing
End Sub

Ich habe es getestet. Den Blattschutz vergeben hat super funktioniert. Den Blattschutz aufheben nicht. Er öffnet die erste Datei, hebt den Blattschutz auf und bringt dann eine Fehlermeldung und bricht ab.
VBA - Fehler in Modul - Modul 1
Fehler in Prozedur: 'protectAllSheets'
________________________________
Fehlernummer: 1004
Beschreibung: Das eingegebene Kenntwort ist ungültig. Stellen Sie sicher, dass die FESTSTELLTASTE nicht aktiviert ist und dass SIe die korrekte Groß-Kleinschreibung verwenden.
OK
Natürlich habe ich das geprüft. Die erste Datei hat ja auch funktioniert.
Könnt ihr mir als Laien sagen was ich tun muss?
Danke.

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Blattschutz über alle Excel-Dateien
11.03.2021 12:24:05
Nepumuk
Hallo Björn,
dann war die Tabelle vorher mit einem anderen Kennwort geschützt. Die Protect-Methode überschreibt ein anderes Kennwort nicht und läuft fehlerfrei weiter.
Gruß
Nepumuk

AW: Blattschutz über alle Excel-Dateien
11.03.2021 12:57:59
Björn
Hallo Nepumuk,
Danke für deine Rückmeldung.
Habe jetzt mehrere Dateien per Hand getestet, das Passwort ist überall identisch und genauso wie im Makro geschrieben. Gibt es noch eine andere Möglichkeit?

AW: Blattschutz über alle Excel-Dateien
11.03.2021 13:09:01
Nepumuk
Hallo Björn,
außer dem angegebenen Grund fällt mir dazu nichts ein.
Ich lass die Frage offen.
Gruß
Nepumuk

AW: Blattschutz über alle Excel-Dateien
11.03.2021 13:36:12
Björn
Habe meinen Fehler gefunden.
Jede Datei hat mehrere Tabellenblätter und in einem Tabellenblatt ist doch noch ein anderes Kennwort, welches ich leider vergessen habe. Sorry.
Kann man den Code umschreiben, dass Tabellenblatt "Tabelle1" immer ignoriert wird?

Anzeige
AW: Blattschutz über alle Excel-Dateien
11.03.2021 13:52:10
Nepumuk
Hallo Björn,
klar:
Sub protectAllSheets(Directory As String, Password As String, Protection As Boolean)
    Dim objWB As Workbook, objSH As Worksheet
    Dim strFile As String, strDir As String
    Dim lngCalc As Long
    
    On Error GoTo ErrExit
    
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        lngCalc = .Calculation
        .Calculation = xlCalculationManual
        .DisplayAlerts = False
    End With
    
    strDir = IIf(Right(Directory, 1) = "\", Directory, Directory & "\")
    
    strFile = Dir(strDir & "*.xls*", vbNormal)
    
    Do While strFile <> ""
        If strDir & strFile <> ThisWorkbook.FullName Then
            Set objWB = Workbooks.Open(strDir & strFile, UpdateLinks:=False)
            For Each objSH In objWB.Worksheets
                If objSH.Name <> "Tabelle1" Then
                    If Protection Then
                        objSH.Protect Password
                    Else
                        objSH.Unprotect Password
                    End If
                End If
            Next
            objWB.Close True
        End If
        strFile = Dir
    Loop
    
    ErrExit:
    
    With Err
        If .Number <> 0 Then
            MsgBox "Fehler in Prozedur:" & vbTab & "'protectAllSheets'" & vbLf & String(60, "_") & _
                vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
                "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
                .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
                "VBA - Fehler in Modul - Modul1"
            .Clear
        End If
    End With
    
    On Error GoTo 0
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = lngCalc
        .DisplayAlerts = True
    End With
    
    Set objWB = Nothing
    Set objSH = Nothing
End Sub

Gruß
Nepumuk

Anzeige
AW: Blattschutz über alle Excel-Dateien
11.03.2021 14:23:11
Björn
Hat alles super geklappt.
Ich danke dir vielmals.
Und das nächste gucke ich genauer, dass ich das Problem gleich erkenne.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige