WorkbookBeforeCloseEvent -> und dann?

Aug 21, 2013 at 7:02 AM
Ich verwende die Zeilen
// bereits bestehende Instanzen berücksichtigen, also auf GetActiveInstance() abklopfen.
                excelApplication = (Excel.Application.GetActiveInstance() == null ? new Excel.Application() : Excel.Application.GetActiveInstance());
                //excelApplication.DisplayAlerts = false;
                excelApplication.WorkbookBeforeCloseEvent += new Excel.Application_WorkbookBeforeCloseEventHandler(excelApplication_WorkbookBeforeClose);
                excelApplication.WorkbookOpenEvent += new Excel.Application_WorkbookOpenEventHandler(excelApplication_WorkbookOpen);
um das Öffnen und Schließen eines Excel Workbooks mit zu bekommen. Das funktioniert auch soweit gut, aber es gibt z.B. den Sonderfall, daß das Dokument noch gespeichert werden muss und der Benutzer auf Abbrechen klickt. Das WorkbookBeforeCloseEvent triggert ja schon vorher und so kann es passieren, daß ich nicht mitbekomme, daß das Dokument offen bleibt, denn dummerweise wird im Fall eines Abbruchs durch den Benutzer auch kein WorkbookOpenEvent generiert.

Mein Workaround wäre jetzt noch zusätzlich WorkbookAfterSaveEvent ebenfalls zu belauschen und in Kombination mit BeforeClose und einer Variablen zu prüfen ob das Dokument nun wirklich geschlossen wurde.

Alternativ über einen Timer ständig zu prüfen, ob ein spezifisches Workbook geöffnet ist, finde ich eher unschön. Gibt es irgendwelche besseren und zuverlässigen Alternativen?
Coordinator
Aug 21, 2013 at 10:09 PM
Ich habw den Part mit WorkbookOpen nicht verstanden. Lass und das mal wie Profis in Regeln zusammenfassen.

Du möchtest beim schliessen eine Workbooks eine Aktion durchführen.
Bedienung1: Das Workbkook muss beim schliessen expliziert gespeichert werden das aussenstehende Änderungen beinhaltet.
Bedienung2: Der Benutzer kann das den Vorgang abbrechen, tut das aber nicht.
'
Ist mein Verständniss soweit richtig?


*Sebastian
Aug 22, 2013 at 9:24 AM
Primärer Anwendungsgedanke ist das Erfassen von Vorgängen, aber auch die Manipulaton in einem bestimmten Workbook.

Zustand:
Das WB ist geöffnet, meine Anwendung hat einen Workbook-Verweis gesetzt.
  1. Ich bekomme das Event WorkbookBeforeClose, ich lösche also den Verweis auf das WB.
  2. Das Workbook hat ausstehende Änderungen, die beim Schließen auf Nachfrage durch Excel gespeichert werden sollen.
  3. Der Benutzer bricht statt zu speichern den Schließvorgang ab.
  4. Ich stehe ohne Workbook-Variable da und meine Anwendung signalisiert falscherweise, daß das WB geschlossen wurde.
Hmm... so wie das jetzt erkläre, kann ich das durch eine Änderung meiner Logik klären. Nämlich indem ich immer so vorgehe vor einem Workbook-Vorgang zu prüfen, ob es vielleicht geöffnet ist. Statt eine permanente Variable mitzuschleppen. Die benötigten Events kann ich mir auch von der Excel.Application holen, muss dann eben prüfen, ob der betroffene Sheet zu dem Workbook gehört, welches mein Ziel ist.