我在工作表上有一个带有ActiveX控件的Excel工作簿(不在Userform上!)。当我关闭工作簿(没有关闭Excel)时一切正常,但当我完全关闭Excel时,它会在工作表上触发ActiveX组合框的更改事件。这会产生错误,因为Excel似乎已经通过删除控件进行了一些清理。
如何绕过或解决此问题?这些事件不应该首先触发,因为关闭时没有更改值。
答案 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