Auswirkung von AutoSpeichern auf Add-Ins und Makros

Erfahren Sie, wie AutoSpeichern in Excel, PowerPoint und Word funktioniert und wie sich dies auf Add-Ins oder Makros auswirken kann.

Übersicht über AutoSpeichern

Wenn eine Datei in der Cloud (d. h. OneDrive, OneDrive for Business oder SharePoint Online) gehostet wird, ermöglicht AutoSpeichern das automatische Speichern von Benutzerbearbeitungen, die automatisch und kontinuierlich gespeichert werden. Wenn die Datei für andere freigegeben wird, werden ihre Änderungen mit der Version dieses Benutzers der Datei zusammengeführt. Wenn AutoSpeichern deaktiviert ist, muss das Speichern manuell ausgelöst werden, damit die Änderungen des Benutzers in der Cloud gespeichert werden und dieser Benutzer die Änderungen anderer Benutzer erhält.

Derzeit stellen Excel, Word und PowerPoint ein BeforeSave-Ereignis bereit, das es einem Entwickler ermöglicht, Code auszuführen, nachdem der Benutzer ein Speichern ausgelöst hat, aber bevor das Speichern erfolgt. Excel stellt auch ein AfterSave-Ereignis bereit, das Makro- oder Add-In-Code ausführen kann, nachdem das Speichern abgeschlossen ist.

Wenn AutoSpeichern aktiviert ist, werden diese Ereignisse automatisch in regelmäßigen Abständen ohne Benutzerinteraktion ausgelöst. Aus diesem Grund können Bei Add-Ins und Makros, die diese Ereignisse nutzen, Probleme auftreten, wenn AutoSpeichern aktiviert ist.

Im Allgemeinen können diese Probleme vermieden werden, wenn der Benutzer autoSpeichern deaktiviert. Sie können dies im Namen des Benutzers tun, indem Sie die AutoSaveOn-Eigenschaft in Word, Excel und PowerPoint verwenden, sofern sie verfügbar ist (siehe das folgende Beispiel). Sie können auch als Entwickler Schritte unternehmen, um diese Probleme zu beheben, damit Ihre Add-Ins und Makros reibungslos funktionieren, auch wenn AutoSpeichern aktiviert ist.

Beispiel

In diesem Beispiel wird AutoSpeichern deaktiviert und der Benutzer benachrichtigt, dass die Arbeitsmappe nicht automatisch gespeichert wird.

Sub UseAutoSaveOn()
    ActiveWorkbook.AutoSaveOn = False
    MsgBox "This workbook is being saved automatically: " & ActiveWorkbook.AutoSaveOn
End Sub

Potenzielle Probleme mit Speicherereignissen und AutoSpeichern

Möglicherweise müssen Sie eines oder mehrere der folgenden Probleme in Bezug auf die Interaktion zwischen Speicherereignissen und AutoSpeichern behandeln:

  1. Code in BeforeSave - oder AfterSave-Ereignissen wird zu lange ausgeführt
  2. Code in Speicherereignissen zeigt ein modales Dialogfeld an
  3. Code in Speicherereignissen löscht den Rückgängig-Stapel (nur Excel)
  4. Code in AfterSave dirties the workbook (nur Excel)
  5. Code in BeforeSave bricht das Speichern der Datei ab (durch Festlegen des Cancel-Arguments auf True)

Problem 1: Code in BeforeSave- oder AfterSave-Ereignissen wird zu lange ausgeführt

Im Allgemeinen reagieren Word, Excel und PowerPoint nicht auf Benutzerinteraktionen, während Add-In- oder Makrocode ausgeführt wird. Wenn die Ausführung ihres Codes in einem BeforeSave - oder AfterSave-Ereignishandler zu lange dauert, kann dies die Benutzerfreundlichkeit erheblich beeinträchtigen.

Wenn AutoSpeichern deaktiviert ist, wird dieser Code nur ausgeführt, wenn der Benutzer explizit zum Speichern entscheidet. Daher ist eine Verzögerung nicht so spürbar und kann vom Benutzer vermieden werden, bis er zum Speichern bereit ist.

Wenn AutoSpeichern aktiviert ist, wird dieser Code regelmäßig automatisch ausgeführt, was das Potenzial hat, den Benutzer zu unterbrechen, insbesondere wenn der Code sehr lange dauert.

Beispielszenario

Stellen Sie sich ein Add-In vor, das es dem Benutzer ermöglicht, benutzerdefinierte Karten basierend auf Daten in einer Excel-Arbeitsmappe zu erstellen. Ein solches Add-In verfügt möglicherweise über BeforeSave-Code , der alle Vom Benutzer erstellten Zuordnungen serialisiert und in der Arbeitsmappe in einem CustomXML-Teil speichert. Dieser Prozess kann eine Sekunde dauern, und Excel reagiert möglicherweise nicht, während dies geschieht.

Wenn AutoSpeichern deaktiviert ist, kann der Benutzer auswählen, wann er speichern möchte. Auch wenn das Add-In den Speichervorgang etwas verlangsamt, bemerkt der Benutzer nicht.

Wenn AutoSpeichern aktiviert ist, wird dieser BeforeSave-Code automatisch in regelmäßigen Abständen ausgeführt, auch wenn sich der Benutzer in der Mitte eines anderen Vorgangs befindet (z. B. das Eingeben von Daten in eine Zelle), was sehr störend sein kann.

Problemumgehung

Add-Ins sollten versuchen, zeitintensive Vorgänge innerhalb eines Speicherereignisses zu vermeiden. In diesem Beispiel kann der Entwickler die benutzerdefinierten Zuordnungen der Datei beibehalten, während sie vom Benutzer erstellt oder geändert werden, anstatt auf das Speicherereignis zu warten.

Problem 2: Code in Speicherereignissen zeigt ein modales Dialogfeld an

Jeder Code, der in einem Speicherereignis ausgeführt wird, das die Benutzeroberfläche anzeigt, z. B. ein modales Dialogfeld, kann die Benutzerfreundlichkeit erheblich beeinträchtigen, wenn AutoSpeichern aktiviert ist. Da die Ereignisse BeforeSave und AfterSave regelmäßig automatisch ausgeführt werden, können diese Dialogfelder den normalen Workflow des Benutzers unterbrechen.

Beispielszenario

Ein Add-In, das ein Word-Dokument vor dem Speichern überprüft, um sicherzustellen, dass das Unternehmensbranding angewendet wird, kann ein Dialogfeld auslösen, das den Benutzer über alle gefundenen Probleme informiert und eine Möglichkeit bietet, sie zu beheben. Da das BeforeSave-Ereignis jetzt automatisch und kontinuierlich ausgelöst wird, wird dieses Überprüfungsdialogfeld möglicherweise plötzlich angezeigt, während der Benutzer etwas anderes tut.

Problemumgehungen

Erwägen Sie, Code zu entfernen, der die Benutzeroberfläche in anderen Bereichen der Anwendung anzeigen muss. Beispielsweise könnte der Benutzer eine Schaltfläche "überprüfen" auswählen, um den Überprüfungsprozess auszulösen, oder Sie können den Validierungscode nur dann auslösen, wenn der Benutzer versucht, die vorhandenen Daten zu ändern.

Wenn Validierungscode nur beim ersten Speichern aus einem neuen Dokument, aber nicht bei nachfolgenden automatischen Speichern ausgelöst werden soll, sollten Sie eine Eigenschaft wie Workbook.Path von Excel überprüfen, bevor eine Benutzeroberfläche während BeforeSave oder AfterSave angezeigt wird. In Excel sollte die Workbook.Path-Eigenschaft leer sein, wenn die Arbeitsmappe noch keinen Speicherort hat.

Problem 3: Code in Speicherereignissen löscht den Rückgängig-Stapel (nur Excel)

Wenn Sie bestimmte VBA-Anweisungen in Excel ausführen, wird der Rückgängig-Stapel im Allgemeinen gelöscht. Wenn Sie beispielsweise den Wert einer Zelle ändern, indem Sie ausführen ActiveCell.Value = "myValue", wird der Rückgängig-Stapel gelöscht. Wenn ein solcher Code im BeforeSave - oder AfterSave-Ereignis für ein Makro oder Add-In vorhanden ist und AutoSpeichern aktiviert ist, kann ein Benutzer dieses Makros oder Add-Ins normale Benutzeraktionen häufig nicht wie erwartet rückgängig machen.

Beispielszenario

Ein Add-In verfügt möglicherweise über Code, der als Reaktion auf das BeforeSave-Ereignis ausgeführt wird, das das Dokument überprüft und Werte in eine "protokoll"-Tabelle in der Arbeitsmappe schreibt. Wenn AutoSpeichern aktiviert ist, würde der Rückgängig-Stapel in regelmäßigen Abständen gelöscht, was Benutzer möglicherweise verärren kann.

Problemumgehung

Erwägen Sie, Code zu entfernen, der in die Arbeitsmappe in BeforeSave - oder AfterSave-Ereignisse schreibt. Beispielsweise kann das im Beispielszenario beschriebene Add-In geändert werden, um das Änderungsprotokoll in einer separaten Datei oder Datenbank zu speichern.

Problem 4: Code in AfterSave dirties the workbook (nur Excel)

Wenn AutoSpeichern aktiviert ist, werden die Ereignisse BeforeSave und AfterSave nur ausgelöst, wenn die Arbeitsmappe seit dem letzten Auslösen geändert wurde. Wenn Code im AfterSave-Ereignis die Arbeitsmappe dirigiert (d. h. zusätzliche Änderungen vornimmt), kann dies möglicherweise Ereignisse auslösen, die für dieselbe Änderung erneut ausgelöst werden, und dann die Ereignisse in die Warteschlange stellen, damit sie auf unbestimmte Zeit erneut ausgelöst werden. Dies könnte Systemressourcen verschwenden und die Akkulaufzeit beeinträchtigen.

Problemumgehung

Code, der die Arbeitsmappe in AfterSave dirigiert , sollte nach BeforeSave oder vollständig an einen anderen Speicherort verschoben werden (siehe Problem 3). Dies ist heute keine bewährte Methode, auch ohne AutoSpeichern, da die Arbeitsmappe in einem unbefristeten "dirty"-Zustand verbleibt, was dazu führt, dass beim Schließen eine Aufforderung angezeigt wird, die den Benutzer auffordert, seine Änderungen zu speichern, auch wenn er keine zusätzlichen Änderungen vorgenommen hat. 

Problem 5: Code in BeforeSave bricht das Speichern der Datei ab (durch Festlegen des Cancel-Arguments auf True)

Heute ist es möglich, das Speichern im BeforeSave-Ereignis abzubrechen, indem Sie auf True festlegen Cancel :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    Cancel = True
End Sub

Wenn AutoSpeichern aktiviert ist, löst die Anwendung (d. h. Excel, Word oder PowerPoint) das Speichern automatisch kontinuierlich aus, bis die Datei keine nicht gespeicherten Änderungen mehr aufweist. Nachdem der Benutzer eine einzelne Änderung an der Datei vorgenommen hat, versucht die Anwendung, sie zu speichern.

Wenn der Entwickler das Speichern in der zuvor beschriebenen Weise abbricht, ermittelt die Anwendung ständig, dass nicht gespeicherte Änderungen vorhanden sind. Dies führt dazu, dass das Speichern (schließlich) erneut versucht wird. Da derselbe Ereigniscode, der die erste Speicherung abgebrochen hat, auch diesen zweiten Speicherversuch abbricht, wird der Prozess fortgesetzt, solange die Datei geöffnet ist, was möglicherweise zu Leistungseinbußen und Akkulaufzeit führt.

Beispielszenario

Ein Add-In kann den standardmäßigen Word-Speichercode vollständig außer Kraft setzen, sodass die Datei in einer Unternehmensdatenbank statt auf einem Datenträger oder sharePoint-Speicherort gespeichert wird. Ein solches Add-In würde zuerst den Speicherversuch abbrechen, bevor versucht wird, an einem anderen Ort zu speichern.

Problemumgehung

Solche Add-Ins sollten sicherstellen, dass AutoSpeichern deaktiviert ist, indem AutoSpeichern Auf False festgelegt wird. Da eine Datei bereits an einem OneDrive- oder SharePoint-Speicherort gespeichert werden muss, damit AutoSpeichern aktiviert ist, sollte AutoSpeichern in den meisten Versionen dieses Szenarios bereits deaktiviert oder deaktiviert sein.

Siehe auch

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.