我正在修改此主题中的答案,使其适用于我的代码,但它对我不起作用。
How to assign an event to multiple objects with excel vba?
有两点不同,我使用复选框而不是组合框,但更重要的是,我在运行时创建了我的复选框。
这是我的班级:
Public WithEvents checkBox1 As MSForms.checkBox
Private Sub checkBox1_Click()
MsgBox "click"
End Sub'
模块代码:
Dim tbCollection As New Collection
Sub macro1()
Dim cbox As OLEObject
Dim myCheckBox As New JohnClass
Set cbox = ActiveSheet.OLEObjects.Add("Forms.CheckBox.1", Left:=Range("A1"))
Set myCheckBox.checkBox1 = cbox.Object
tbCollection.Add cbox
end sub
我可以看到我有一个对新创建的复选框的引用,因为我可以更改标题,但是当我点击它时,没有任何反应。
答案 0 :(得分:1)
您需要将自定义类的实例添加到集合中。变化
tbCollection.Add cbox
到
tbCollection.Add myCheckBox
<强>更新强>
在运行时添加OLEObject并运行任何其他代码似乎存在一些问题。我不知道问题是什么,但这似乎有效。
Public tbCollection As Collection
Sub macro1()
ActiveSheet.OLEObjects.Add ClassType:="Forms.CheckBox.1", Left:=1, Top:=1
Application.OnTime Now, "AddToClass"
End Sub
Sub AddToClass()
Dim myCheckBox As JohnClass
Set tbCollection = New Collection
Set myCheckBox = New JohnClass
Set myCheckBox.CheckBox1 = ActiveSheet.OLEObjects(ActiveSheet.OLEObjects.Count).Object
tbCollection.Add myCheckBox
End Sub