5

我有一个带有应用程序对象的加载项。该对象被声明为 WithEvents。这使我能够在每次用户保存文件时将一些数据点刷新到中央数据库。这在大多数情况下都有效。但是,有一位用户退出了 Excel 应用程序,该应用程序调用了“保存”对话框。使用未保存的文件退出 Excel 似乎意味着 WorkbookBeforeSave 事件不会触发。

只是为了强调,我已经确认当用户按下 CTRL-S 或按下保存按钮时该事件会触发。我还确认如果我退出应用程序,该事件不会触发。

我可以想到一些解决方法(例如,每 10 秒自动保存一次),但我对此并不感兴趣。任何人都可以确认这种行为和/或是否有人有补救措施?

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
4

2 回答 2

5

您可以使用Workbook_BeforeClose例程和工作簿对象的Saved属性。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    If ThisWorkbook.Saved = False Then
        'Call save function
    End If

End Sub
于 2013-01-07T20:36:12.847 回答
2

您是否考虑过在 BeforeClose 之前使用?这可能是一个更好的选择。

于 2013-01-07T20:33:58.927 回答