Freigeben über

"workbook.close savechanges=true" im workbookClose-Event ermitteln und abfangen

Anonym
2016-04-09T15:38:20+00:00

Ich muss in einem AddIn für Excel2010 das Speichern der Anwender abfangen, um im Vorfeld verschiedene Aktionen durchzuführen. Hierfür fange ich das Speichern im workbookbeforeclose-Event ab und gebe einen eigenen Speicherndialog aus. Klappt im normalen Betrieb auch wunderbar.

Probleme machen allerdings Makros, welche die Datei via workbook.close schließen und direkt den Speichernbefehl mitgeben. Excel geht in der Eventfolge dann so vor, dass das Workbook zunächst geschlossen wird (WorkbookBeforeClose wird aktiv). Zu diesem Zeitpunkt ist die workbook.saved-Eigenschaft allerdings noch = False. Ich weiß zu diesem Zeitpunkt also noch nicht, ob das Workbook vom Anwender (bzw. vom Makro) gespeichert werden soll oder nicht. Wurde angegeben, ob gespeichert werden soll oder nicht, will ich das natürlich nicht nochmals abfragen und entsprechend reagieren.

Kann ich irgendwie ermitteln, ob die Datei mit oder ohne Speichern geschlossen wird?

Microsoft 365 und Office | Excel | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare

5 Antworten

Sortieren nach: Am hilfreichsten
  1. Andreas Killer 144.1K Zuverlässigkeitspunkte Freiwilliger Moderator
    2016-04-10T06:01:11+00:00

    Es wird erst das beforeClose-Ereignis aktiv und danach das beforeSave.

    Genau dadurch entsteht das Problem, dass ich, wenn die Datei geschlossen wird noch nicht weiß, ob die Datei gespeichert wird (werden soll).

    Hmm... hab ich mich vertan? Sieht so aus, Entschuldigung. Spielt aber nicht wirklich eine Rolle.

    Ob die Datei gespeichert werden soll oder nicht weißt Du in dem Momemt wenn Workbook_BeforeSave aufgerufen wird.

    Und einen Dialog zeigst Du nur wenn SaveAsUI True ist. Oder prüfst irgendwas... wenn die Prüfung fehlschlägt, dann setzt Du Cancel auf True und fertig, die Datei bleibt offen.

    Soll die Datei ohne speichern geschlossen werden, dann gibst Du eine Fehlermeldung aus und setzt Du zusätzlich Saved auf True.

    Was willst Du mit Workbook_BeforeClose? Das brauchst Du in dem Fall doch überhaupt nicht.

    Wenn Workbook_BeforeClose kommt soll die Datei geschlossen werden, das kommt auch wenn der User nicht speichern möchte. An dem Punkt ist das nicht unterscheidbar.

    Nachtrag:

    Um beim Speichern zu wissen ob die Datei geschlossen werden soll oder nicht ist dieses Szenario denkbar:

    Option Explicit

    Dim CloseMode As Boolean

    Private Sub Workbook_BeforeClose(Cancel As Boolean)

      CloseMode = True

    End Sub

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

      If CloseMode Then

        Cancel = True

        ThisWorkbook.Saved = True

      Else

        'Was auch immer

      End If

    End Sub

    Wie auch immer, Dein Code muss in Workbook_BeforeSave.

    Andreas.

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  2. Anonym
    2016-04-09T20:30:00+00:00

    Hallo Claus,

    ich werde das morgen mal probieren, fürchte aber, dass dieses Datum auch erst beim eigentlichen speichern gesetzt wird, wenn das workbook.saved auch gesetzt wird. Das wäre dann wieder zu spät.  

    Gruß 

    Jan Max

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  3. Anonym
    2016-04-09T19:21:43+00:00

    Hallo Jan,

    frage doch die letzte Speicherung ab mit

    ThisWorkbook.BuiltinDocumentProperties(12)

    Damit wird dir das Datum und die Zeit der letzten Speicherung angegeben. Liegt diese länger zurück ist die Mappe noch nicht gespeichert.

    Claus

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  4. Anonym
    2016-04-09T18:01:23+00:00

    Hi Andreas, 

    das ist so leider nicht ganz richtig. Es wird erst das beforeClose-Ereignis aktiv und danach das beforeSave. Wäre es, wie von dir beschrieben hätte ich kein Problem. ;) 

    Genau dadurch entsteht das Problem, dass ich, wenn die Datei geschlossen wird noch nicht weiß, ob die Datei gespeichert wird (werden soll).

    Gruß 

    Jan Max

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  5. Andreas Killer 144.1K Zuverlässigkeitspunkte Freiwilliger Moderator
    2016-04-09T17:47:28+00:00

    Hierfür fange ich das Speichern im workbookbeforeclose-Event ab und gebe einen eigenen Speicherndialog aus. Klappt im normalen Betrieb auch wunderbar.

    Da ist das Problem: Workbook_BeforeClose ist das Ereignis vom dem Schließen, was aber erst nach dem Speichern aufgerufen wird.

    Nimm Workbook_BeforeSave stattdessen, dann brauchst Du den Dialog auch nur zu zeigen wenn SaveAsUI True ist.

    Andernfalls ist es ein normales Speichern, bzw. ein Speichern bei dem ein Pfad vorgegeben wird.

    Andreas.

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare