使用使用WithEvents声明的COM对象时禁用Excel按钮

时间:2015-02-05 11:52:15

标签: excel vba events com

我有一张Excel工作表,上面有一个按钮(ActiveX版本)。 在按钮单击代码我正在使用COM对象。我需要捕获事件,因此使用 WithEvents

声明对象
Option Explicit

Private WithEvents m_object As MyObjectWithEvents

Private Sub Button_Click()
  Set m_object = New MyObjectWithEvents
  m_object.DoStuff
End Sub

添加代码后,它就可以了。但在关闭并重新打开工作簿后,按钮停止工作。 该按钮仍然可以点击但没有任何反应。 Button_Click()永远不会被调用。另一个奇怪的事情是悬停在按钮上显示一个十字架(就像你在一个牢房时),而不是通常的鼠标箭头。

只要删除 WithEvents 关键字,按钮就会再次运行,也就是说,Button_Click会被执行。

将所有这些从表单代码移到一个类中。但是,我仍然对发生的事情感到好奇。听起来像安全相关的东西,但我在网上找不到任何东西。

你知道发生了什么吗?

0 个答案:

没有答案