Excel WorkbookBeforeClose事件多次激发

我有以下一段代码,我已经写在Excel VBA中,以控制任何Excel工作簿的On_Close事件。 我已经将这些代码编写成了一个Excel加载项,因此它被加载了所有打开的Excel工作簿。

插件在closures事件(而不是closures之前)上查找的目标是,如果工作簿保存在某个path中,则应该通过一些自定义提示来提醒用户,否则什么也不做。

问题是,虽然事件正确触发,它会多次触发(主要是3次),我无法find可能的原因。 我已经在Word VBA中翻译了相同的代码,并且似乎在那里运行良好。

  • 我有一个标准模块: "savefromtemp"

 Option Explicit Dim oAppClass As New ThisApplication Sub Auto_Open() Set oAppClass.oApp = Application End Sub 
  • 我有一个类模块: ThisApplication

 Option Explicit Public WithEvents oApp As Application Private Sub oApp_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean) MsgBox "abt to close" Dim iRet As Integer Dim sFolderName As String, fDialog As FileDialog, ret As Long 'Debug.Print ActiveWorkbook.FullName If InStr(1, ActiveWorkbook.FullName, "C:\Users\" & Environ("username") & "\SDocuments\") Then iRet = MsgBox("Blah Blah Blah. Do you want to save this file to different location?", vbOKCancel, "Alert") If iRet = vbOK Then Set fDialog = Application.FileDialog(msoFileDialogSaveAs) ret = fDialog.Show If ret <> 0 Then sFolderName = fDialog.SelectedItems(1) 'MsgBox sFolderName If sFolderName = "" Then MsgBox "Failed to save. Please check!" End If ' Else ' MsgBox "User pressed cancel" End If Set fDialog = Nothing ElseIf iRet = vbCancel Then End If End If End Sub 

因为这是一个应用程序级别的事件处理程序,所以当您closuresExcel应用程序本身时,会触发所有打开的工作簿,包括任何AddIn

您将需要testingclosures工作簿是否是您要处理的工作簿

注意:当我testing它时,closures一个工作簿只会为我调用一次事件。