Excel VBA – WorkbookBeforeSave事件

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

为了强调一下,我已经确认,当用户点击CTRL-S或者按下保存button时,事件会被触发。 我也证实,如果我退出申请,事件不会触发。

我可以考虑一些解决方法(例如每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 

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

 Private Sub Workbook_BeforeClose(Cancel As Boolean) If ThisWorkbook.Saved = False Then 'Call save function End If End Sub 

你有没有考虑BeforeClose之前使用? 这可能是一个更好的select。