Excel Control事件在应用程序关闭时触发

时间:2012-01-24 13:50:43

标签: excel vba activex

我在工作表上有一个带有ActiveX控件的Excel工作簿(不在Userform上!)。当我关闭工作簿(没有关闭Excel)时一切正常,但当我完全关闭Excel时,它会在工作表上触发ActiveX组合框的更改事件。这会产生错误,因为Excel似乎已经通过删除控件进行了一些清理。

如何绕过或解决此问题?这些事件不应该首先触发,因为关闭时没有更改值。

2 个答案:

答案 0 :(得分:2)

将此子插入模块并使用它来保存和关闭工作簿和Excel。首先禁用事件,以防止出现问题。

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

您也可以查看“ThisWorkbook”中的代码;也许Workbook_BeforeClose中有一些东西。

答案 1 :(得分:2)

如果没有看到你的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