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?
Ich habe bisher diesen Makro benutzt:
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
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.
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.
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!
schließe mich an Oubyis Kommentat an, ausserdem danke, dass Du uns deine Lösung mitgeteilt hast (ist eine immer gerne angenommene Bereicherung!)
DH!
Sehr gute Idee. Da hätte ich auch drauf kommen sollen.
Hatte diese Funktion aber irgendwie nicht mehr "auf dem Radar".
Nach dem With
.Unprotect ("passwort")
'dein Code
.Protect("passwort")
End With