Excel-VBA捕获所有工作表CommandButton单击事件以运行通用代码

我想有一个按下任何工作表commandbutton时运行的代码段。 我已经看到了用户表单的类似的东西,但无法find适用于(并限于)工作表button的东西。

我已经尽可能创build了一个名为clsCmdButton的类模块,其代码如下:

Private WithEvents cmdButton As MSForms.CommandButton Private Sub cmdButton_Click() 'code i want to run End Sub 

然后,我想我需要遍历所有的工作表,find它上面的命令button,并把它们作为这个类的一个新的入口。 这可以在Workbook_Open事件中完成,但是我不确定如何对其进行编码。 谁能帮忙?

谢谢!

我会像这样修改你的class级:

 Private WithEvents m_ctlButton As MSForms.CommandButton Private Sub Class_Terminate() Set m_ctlButton = Nothing End Sub Private Sub m_ctlButton_Click() 'code i want to run End Sub Public Property Set Button(ctlButton As MSForms.CommandButton) Set m_ctlButton = ctlButton End Property 

我们假设这是Class1,因为我很懒。

现在在一个新的模块中添加这个:

 Option Explicit Dim colButtons As Collection Sub hookButtons(ws As Object) Dim oBtn As Class1 Dim obj As OLEObject Set colButtons = New Collection For Each obj In ws.OLEObjects If TypeOf obj.Object Is MSForms.CommandButton Then Set oBtn = New Class1 Set oBtn.Button = obj.Object colButtons.Add oBtn End If Next End Sub 

最后,在ThisWorkbook模块中添加:

 Private Sub Workbook_Open() hookButtons ActiveSheet End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) hookButtons Sh End Sub 

既然你不能单击一个button没有激活它的工作表,似乎更容易勾勾活动工作表的button在任何给定的时间。 使用sheetActivate事件还应该意味着在工作簿中的其他代码中出现未处理错误的情况下,它会更频繁地被重置。