События управления Excel запускаются при закрытии приложения - PullRequest
2 голосов
/ 24 января 2012

У меня есть Excel-рабочая книга с элементами управления ActiveX на рабочих листах (не на пользовательской форме!).Когда я закрываю книгу (не закрывая Excel), все работает хорошо, но когда я закрываю Excel полностью, это вызывает события Change ActiveX Comboboxes на листах.Это создает ошибки, потому что кажется, что Excel уже сделал некоторую очистку, удалив элементы управления.

Как я могу обойти или решить это?Эти события не должны запускаться в первую очередь, потому что никакие значения не изменяются при закрытии.

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Не видя, как настроены ваши элементы управления ActiveX, я не могу сказать вам, почему происходят их изменения.Однако, предполагая, что событие BeforeClose рабочей книги запускается до событий изменения ActiveX, вы можете добавить глобальную переменную для отслеживания закрытия рабочей книги.

В модуле кода:

Public g_bClosingWorkbook As Boolean

В ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
   g_bClosingWorkbook = True
End Sub

Private Sub Workbook_Open()
   g_bClosingWorkbook = False
End Sub

Затем запускайте события изменения, только если книга не закрывается.

Private Sub ComboBox1_Change()
   If Not g_bClosingWorkbook Then
      ' do stuff here
   End If
End Sub
2 голосов
/ 24 января 2012

Вставьте этот саб в модуль и используйте его для сохранения и закрытия как книги, так и Excel. Сначала отключаются события, которые должны предотвратить проблему.

Sub closeNoEvents()
   Application.EnableEvents = False
    On Error Resume Next
    ThisWorkbook.Save
    Application.Quit
    ThisWorkbook.Close
End Sub

Вы также можете проверить, какой код находится в "ThisWorkbook"; может быть, что-то есть в Workbook_BeforeClose.

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