Clever-Excel-Forum

Normale Version: 2 Workbook_BeforeClose miteinander verbinden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag,

Ich habe eine Excel Schichtbuchdatei auf die mehrere Personen zugreifen.
Diese schliesst sich automatisch nach 2min und speichert dabei die Änderungen.
In dieser Datei sind 6 Filter damit man verschiedene Arbeitsgruppen, Schichtgruppen usw. filtern kann.
Jetzt würde ich gerne beim Beenden der Datei das alle Filter auf "alle" gesetzt werden.
Dazu habe ich auch folgendes gefunden:

Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
   With ActiveSheet
       If .AutoFilterMode Then ' Filter Ja/Nein
           If .FilterMode Then ' Filter gesetzt?
               .ShowAllData
           End If
       End If
   End With
End Sub



Das Problem ist, das schon ein Workbook BeforeClose vorhanden ist:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next                            ' Fehlerebehandlung ausschalten
    ' Makros beenden
    Application.OnTime EarliestTime:=DaEt, Procedure:="Start", Schedule:=False
    Application.OnTime EarliestTime:=DaET1, Procedure:="Schliessen", Schedule:=False
    On Error GoTo 0                                 ' Fehlerbehandlung einschalten
End Sub



Wenn ich jetzt den neuen Teil einfach mit reinsetze, fragt er mich ob ich die Änderungen speichern will.


Private Sub Workbook_BeforeClose(Cancel As Boolean)
   With ActiveSheet 
       If .AutoFilterMode Then ' Filter Ja/Nein 
           If .FilterMode Then ' Filter gesetzt? 
               .ShowAllData 
           End If 
       End If 
   End With 

  On Error Resume Next                            ' Fehlerebehandlung ausschalten
    ' Makros beenden
    Application.OnTime EarliestTime:=DaEt, Procedure:="Start", Schedule:=False
    Application.OnTime EarliestTime:=DaET1, Procedure:="Schliessen", Schedule:=False
    On Error GoTo 0                                 ' Fehlerbehandlung einschalten
End Sub
   

Insgesamt sieht meine "Diese Arbeitsmappe" so aus:

Option Explicit                                     ' Variablendefinition erforderlich



Private Sub Workbook_Open()
    Zeitmakro
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next                            ' Fehlerebehandlung ausschalten
    ' Makros beenden
    Application.OnTime EarliestTime:=DaEt, Procedure:="Start", Schedule:=False
    Application.OnTime EarliestTime:=DaET1, Procedure:="Schliessen", Schedule:=False
    On Error GoTo 0                                 ' Fehlerbehandlung einschalten
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ' Makro anhalten
    Application.OnTime EarliestTime:=DaEt, Procedure:="Start", Schedule:=False
    Zeitmakro                                       ' Makro erneut starten
End Sub

 Wie schaffe ich es, das beim Schließen/speichern die Filter auf "alle" gesetzt werden?

gruß Manfred
Hallöchen,

Meldungen schaltest DU mit

Application.DisplayAlerts=False

aus.
Hallo Manfred,

so wird die Mappe automatisch gespeichert, wenn ein aktiver Filter ausgeschaltet wurde (blau markiert):
Private Sub Workbook_BeforeClose(Cancel As Boolean)
   With ActiveSheet
       If .AutoFilterMode Then ' Filter Ja/Nein
           If .FilterMode Then ' Filter gesetzt?
               .ShowAllData
               Me.Save
           End If
       End If
   End With
   On Error Resume Next                            ' Fehlerebehandlung ausschalten
   ' Makros beenden
   Application.OnTime EarliestTime:=DaEt, Procedure:="Start", Schedule:=False
   Application.OnTime EarliestTime:=DaET1, Procedure:="Schliessen", Schedule:=False
   On Error GoTo 0                                 ' Fehlerbehandlung einschalten
End Sub

Hallo André,
hast Du Deinen Tipp getestet? Bei mir funktioniert er nicht.  Undecided

Gruß Uwe
Hi Uwe,

ok, ich hätte schreiben sollen "Fehlermeldungen schaltest Du damit aus" Sad wobei dass dann gar nicht gefragt war :22:

Ansonsten lässt die Beschreibung doch noch offen, ob die Änderungen mit dem BeforeClose gespeichert werden sollen oder nicht. Ich würde das in das Schließen-Makro einfügen. Kann ja sein, dass jemand schließen will ohne zu speichern.

Dann käme ins BeforeClose nur so was wie Me.Saved = True

und das Öffnen der Filter ins BeforeSave und … na ja, ich geh jetzt erst mal schlafen. Ich würde aber trotzdem an Stelle des TE mal überdenken, ob ich den Kloß oder zumindest Teile davon in den Safe lege Smile
Hi André,

(07.08.2019, 21:41)schauan schrieb: [ -> ]ok, ich hätte schreiben sollen "Fehlermeldungen schaltest Du damit aus" Sad wobei dass dann gar nicht gefragt war  :22:
stimmt aber auch nicht. Dafür ist On Error ... zuständig. Wink

(07.08.2019, 21:41)schauan schrieb: [ -> ]Dann käme ins BeforeClose nur so was wie Me.Saved = True
Is nich war!? Smile

Gruß Uwe
Hallo Uwe,

mit Me.Save klappt es, DANKE.

Gruß Manfred
Moin Uwe,

DU bringst mich aber auch auf den Holzweg …
Wie ich zuerst geschrieben habe, Meldungen schaltest Du mit Application.DisplayAlerts=False aus. Hätte ich mal so stehen lassen können, auch wenn das nicht gefragt war …

Mit On Error … könnten wir jetzt anfangen, zu philosophieren Smile Meldungen schaltet das auch nicht aus, die entstehen nur gar nicht erst weil der Fehler übergangen wird Smile

Das

BeforeClose nur so was wie Me.Saved = True

hast Du bisschen aus dem Zusammenhang genommen. Ich schrieb ja zum einen, das sich der TE überlegen sollte, Aktionen in's Schließen- Makro oder BeforeSave zu nehmen, dann passt das im BeforeClose und es erscheint keine Meldung Smile