Excel控件事件在应用程序closures时触发

我有工作表上的ActiveX控件的Excel工作簿(而不是在用户窗体!)。 当我closures工作簿(不closuresExcel)时,一切正常,但是当我完全closuresExcel时,它会触发工作表上ActiveXcombobox的更改事件。 这会产生错误,因为看起来Excel已经通过删除控件来完成一些清理。

我怎样才能绕过或解决这个问题? 这些事件不应该首先触发,因为没有值在接近改变。

没有看到你的ActiveX控件的设置,我不能告诉你为什么他们的变化事件正在触发。 但是,假定工作簿的BeforeClose事件在ActiveX更改事件之前触发,您可以添加一个全局variables来跟踪工作簿closures的时间。

在一个代码模块中:

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 

然后,如果不closures工作簿,则只运行更改事件。

 Private Sub ComboBox1_Change() If Not g_bClosingWorkbook Then ' do stuff here End If End Sub 

将此子插入到模块中,并使用它来保存和closures工作簿和Excel。 事件首先被禁用,这应该可以避免这个问题。

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

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