Ich benötige einen Makro, um ausgewählte Filter beim Schliessen zurück zu setzen. Aber mit dem Blattschutz funktioniert das nicht mehr. Kann mir jemand helfen?

4 Antworten

Teste mal (Sicherheitskopie):

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim booProtected As Boolean
Dim wksSheet As Worksheet
For Each wksSheet In ThisWorkbook.Worksheets
booProtected = False
With wksSheet
If .ProtectContents = True Then
.Unprotect ("123") 'Passwort anpassen!
booProtected = True
End If
If .AutoFilterMode Then
If .FilterMode Then
.ShowAllData
End If
End If
'ANPASSEN:
If booProtected = True Then .Protect Password:="123", DrawingObjects:=True, Contents:=True, Scenarios:=True
End With
Next wksSheet
ThisWorkbook.Save
End Sub

Passwort anpassen oder weglassen.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
Iamiam  09.07.2016, 00:35

und Modul verbergen, denn da steht ja das Passwort drin. Oder Passwort aus einem Bereich holen, der zB verborgen ist (zB ausgeblendete TitelZeile, aber auch da könnte jeder Fremde das Makro betätigen. Am besten aus einer anderen Datei holen, die sonst niemand hat.

1

Hi,

hebe doch den Blattschutz beim Schließen auf, ändere die Filter (siehe unten) und aktiviere wieder den Blattschutz.

Ich habe in B1 einen Filter für Spalte B und so setze ich ihn zurück: ActiveSheet.Range("$B$1:$B$1048576").AutoFilter Field:=2

Hilft das?

Viele Grüße

Hallo zusammen

Vielen Dank für eure Hilfe. Habe mein Problem nun folgendermassen gelöst:

Sub Workbook_Open()
 ActiveSheet.Protect userinterfaceonly:=True, Password:="" ' Mit Passwort 123, dann ändern(Password:="123")
 Dim i As Long
 For i = 1 To Worksheets.Count
 Sheets(i).Protect userinterfaceonly:=True
 Sheets(i).EnableOutlining = True 'für Gliederung
 Sheets(i).EnableAutoFilter = True 'für Autofilter
 Next i
 End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim wksSheet As Worksheet
    For Each wksSheet In ThisWorkbook.Worksheets
        With wksSheet
            If .AutoFilterMode Then
                If .FilterMode Then
                    .ShowAllData
                End If
            End If
        End With
    Next wksSheet
    ThisWorkbook.Save
End Sub

Ich danke euch trotzdem recht herzlich!

Oubyi, UserMod Light  11.07.2016, 13:18

DH!
Sehr gute Idee. Da hätte ich auch drauf kommen sollen.
Hatte diese Funktion aber irgendwie nicht mehr "auf dem Radar".

0
Iamiam  11.07.2016, 14:12

schließe mich an Oubyis Kommentat an, ausserdem danke, dass Du uns deine Lösung mitgeteilt hast (ist eine immer gerne angenommene Bereicherung!)

0

Nach dem With

.Unprotect ("passwort")

'dein Code

.Protect("passwort")

End With