У меня есть следующий фрагмент кода, который я написал в excel vba для управления событием On_Close
любой книги Excel. Я написал код как надстройку Excel и, следовательно, загружается для всех открытых книг excel.Excel WorkbookBeforeClose событие, выпущенное несколько раз
Цель добавления для поиска по закрытому событию (скорее, перед закрытием), что если книга была сохранена по определенному пути, она должна предупредить пользователя о некоторых пользовательских приглашениях, иначе ничего не делать.
Проблема в том, что хотя событие срабатывает правильно, оно срабатывает несколько раз (в основном) (3), и я не могу найти причину этого. Я перевел тот же код в 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
Просто наблюдение, но «(в основном 3)» заставляет меня думать, что он может стрелять для каждого рабочего листа в книге (по умолчанию 3). Наверное, не полезно - но может дать вам что-то, на что посмотреть. – dav1dsm1th
Как вызывается 'oApp_WorkbookBeforeClose'? Разве это не стандартная нотация «Workbook_BeforeClose»? –
Вы пытались отключить события? 'Application.EnableEvents = False' (после этого в конце вашего кода возвращается значение true) – Sam