Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

2 Workbook_BeforeClose miteinander verbinden
#1
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
Antworten Top
#2
Hallöchen,

Meldungen schaltest DU mit

Application.DisplayAlerts=False

aus.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
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
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Eriman
Antworten Top
#4
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
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
Antworten Top
#6
Hallo Uwe,

mit Me.Save klappt es, DANKE.

Gruß Manfred
Antworten Top
#7
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


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