Избегайте двойного выполнения событий уровня приложения в надстройке (xlam) - PullRequest
1 голос
/ 06 февраля 2020

У меня есть xlam, который работает при открытии и закрытии книги.

Для этого я создал модуль класса со следующим кодом:

''''''''''''''''''''''' Setup Event '''''''''''''''''''''''''''''''''''''''''''''''''

Public WithEvents appevent As Application

''''''''''''''''''''''' Setup Application at Close''''''''''''''''''''''''''''''''''''''''''''

Private Sub appevent_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)

    MsgBox("The workbook " & Wb.Name & " will close now")

End Sub

''''''''''''''''''''''' Setup Application at Open''''''''''''''''''''''''''''''''''''''''''''

Private Sub appevent_WorkbookOpen(ByVal Wb As Workbook)

     MsgBox("The workbook " & Wb.Name & " is now open")

End Sub

Затем в объекте «ThisWorkbook» у меня есть этот код:

Dim myobject As New Class1

Sub Workbook_Open()

    Set myobject.appevent = Application

End Sub

После установки надстройки, когда файл открывается, появляются два сообщения: одно при запуске Excel, затем одно при открытии файла, аналогично дело о закрытии.

Почему это происходит и как этого избежать?

1 Ответ

0 голосов
/ 07 февраля 2020

Не проверено, но попробуйте следующее:

Private Sub appevent_WorkbookOpen(ByVal Wb As Workbook, Cancel As Boolean)

    If Wb Is ThisWorkbook Then Exit Sub  ' don't do anything when the add-in opens  
    MsgBox("The workbook " & Wb.Name & " is now open")

End Sub

и аналогично для appevent_WorkbookBeforeClose.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...