Hallo,
ich habe in "DieseArbeitsmappe" den folgenden Code eingetragen:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim wksSheet As Worksheet
For Each wksSheet In ThisWorkbook.Worksheets
If wksSheet.FilterMode Then wksSheet.ShowAllData
Next wksSheet
End Sub
Das funktioniert auch beim ersten Tabellenblatt. Die anderen bleiben aber weiterhin gefiltert.
In der Microsoft Visual Basic Ansicht ist mir aber aufgefallen, dass ich zum Teil Sheet1, Sheet2 etc, aber auch Tabelle1, Tabelle2 etc. habe. Ich denke mein Problem hat damit zu tun, da Tabelle1 und Tabelle2 gefiltert bleiben.
Versuche mal das.. Gehe den code in einem normalen Modul mit f8 schrittweise durch:
(Ungetestet)
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
For Each sheet In sheets
If Sheet.FilterMode Then
Sheet.ShowAllData
End if
Next
End Sub
Hallöchen,
mal noch zur Erklärung. Damit
For Each wksSheet In ThisWorkbook.Worksheets
gehst Du durch jedes Tabellenblatt, egal, wie es heißt.
Hallo,
ich sitze immernoch dran und bekomme es einfach nicht hin.
Aktuell ist ein Blattschutz drin, was das Filtern blockiert. Daher mein Gedanke bei
BeforeSave:
- Blattschutz bei allen Blättern entfernen
- Filter auf allen Blättern löschen
- Blattschutz bei allen Blättern / oder bei bestimmten Blättern aktivieren
Folgendes habe ich versucht:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
For i = 1 To Worksheets.Count
Worksheets(i).Unprotect Password:=""
Next
Application.ScreenUpdating = True
For Each Sheet In Sheets
If Sheet.FilterMode Then
Sheet.ShowAllData
End If
Next
Dim sh As Long
For sh = 1 To Sheets.Count
With Sheets(sh)
.Protect UserInterfaceOnly:=True, _
DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowFormattingCells:=True, AllowFormattingRows:=True, _
AllowInsertingRows:=True, AllowDeletingRows:=True, _
AllowFiltering:=True, AllowSorting:=True, _
Password:=""
.EnableOutlining = True 'für Gliederung
.EnableAutoFilter = True 'für Autofilter
End With
Next
End Sub
Leider wird der Filter nur auf dem aktiven Blatt deaktiviert und nicht auf allen Blättern :(
Hallo,
Zitat:Leider wird der Filter nur auf dem aktiven Blatt deaktiviert und nicht auf allen Blättern :(
mache eine Schleife über alle Tabellenblätter und schalte die Filter hier aus
Hallo,
@Blaubär:
Noch eine dritte Schleife ? Er hat doch schon zwei davon !!!
Code:
For i = 1 To Worksheets.Count
Worksheets(i).Unprotect Password:=""
Next
Application.ScreenUpdating = True
For Each Sheet In Sheets
If Sheet.FilterMode Then
Sheet.ShowAllData
End If
Next
Da reicht doch schon eine ...
Code:
For i = 1 To Worksheets.Count
With Worksheets(i)
.Unprotect Password:=""
If .FilterMode Then .ShowAllData
End With
Hallo flotter Feger,
sind Schleifen eine Rarität? Das habe ich nicht gewußt, sorry.
Vielleicht geht es dann, wenn man(n) mehrere Schleifen zu einer verwurstet.
Jedenfalls muß er für sein Vorhaben ohnehin in jedes Blatt.
Hallo,
ich habe es nun mit folgendem Code probiert.
Das Problem ist, dass lediglich der Filter in der aktiven Tabelle deaktiviert wird. Die Tabellen in den anderen Blättern bleiben sortiert. Ebenso bleibt der Filter in der Tabelle auf dem aktiven Blatt aktiv, wenn beim Speichern eine Zelle außerhalb der Tabelle markiert ist.
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
For i = 1 To Worksheets.Count
With Worksheets(i)
.Unprotect Password:=""
If .FilterMode Then .ShowAllData
End With
Next
For i = 1 To Worksheets.Count
With Worksheets(i)
.Protect UserInterfaceOnly:=True, _
DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowFormattingCells:=True, AllowFormattingRows:=True, _
AllowInsertingRows:=True, AllowDeletingRows:=True, _
AllowFiltering:=True, AllowSorting:=True, _
Password:=""
.EnableOutlining = True 'für Gliederung
.EnableAutoFilter = True 'für Autofilter
End With
Next
End Sub
Hallo,
Zitat:Das Problem ist, dass lediglich der Filter in der aktiven Tabelle deaktiviert wird.
... drum ja auch mein Vorschlag