Alle Filter beim Schließen der Datei zurücksetzen
#11
Hallo, :19:

prinzipiell so: :21:


Code:
Dim wksSheet As Worksheet
For Each wksSheet In ThisWorkbook.Worksheets
    If wksSheet.FilterMode Then wksSheet.ShowAllData
Next wksSheet
Top
#12
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.
Top
#13
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
Top
#14
Hallöchen,

mal noch zur Erklärung. Damit

For Each wksSheet In ThisWorkbook.Worksheets

gehst Du durch jedes Tabellenblatt, egal, wie es heißt.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#15
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:
  1. Blattschutz bei allen Blättern entfernen
  2. Filter auf allen Blättern löschen
  3. 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 :(
Top
#16
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
Top
#17
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
Top
#18
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.
Top
#19
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
Top
#20
Hallo,

Zitat:Das Problem ist, dass lediglich der Filter in der aktiven Tabelle deaktiviert wird.

... drum ja auch mein Vorschlag
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste