Mam dodatek z obiektem aplikacji. Obiekt jest zadeklarowany WithEvents. Dzięki temu mogę opróżniać niektóre punkty danych do centralnej bazy danych za każdym razem, gdy użytkownik zapisuje plik. Działa to przez większość czasu. Istnieje jednak jeden użytkownik, który zamyka program Excel, który wywołuje okno dialogowe Zapisz. Wygląda na to, że zamknięcie programu Excel z niezapisanym plikiem oznacza, że zdarzenie WorkbookBeforeSave nie uruchamia się.Excel VBA - WorkbookBeforeSave Event Czy
Podkreślam, że zdarzenie zostało wywołane, gdy użytkownik kliknie CTRL-S, lub naciśnie przycisk zapisu. Potwierdziłem również, że zdarzenie NIE uruchomi się, jeśli zamknę aplikację.
Mogę wymyślić kilka obejść (na przykład automatycznie zapisuję co 10 sekund), ale nie szaleję z tego powodu. Czy ktokolwiek może potwierdzić to zachowanie i/lub czy ktoś ma lekarstwo?
Option Explicit
Private WithEvents mapp As Excel.Application
Private Sub mapp_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
' Sanity preservation device
Msgbox "WorkbookBeforeSave event fired."
SaveSomeData Wb
End Sub
, więc czy zdarzenie w ogóle się wystrzeliwuje? Być może chcesz się upewnić, że 'Application.enableEvents = True' – Larry
Tak, zdarzenie zostanie wywołane, jeśli zapisuję skoroszyt za pomocą CTRL-S lub wciskam przycisk zapisu na wstążce. Jednakże, jeśli zakończę program Excel (ALT-F4), zostanie wyświetlony monit o zapisanie pliku, ale zdarzenie WorkbookBeforeSave nie zostanie uruchomione. Gdyby było coś takiego jak OnQuit lub coś dla obiektu Application, użyłbym tego. Jednak nie widzę czegoś takiego. – PirateGrunt