1

我正在修改此线程中的答案以使其适用于我的代码,但它不适用于我。

如何使用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

我可以看到我引用了新创建的复选框,因为我可以更改标题,但是当我单击它时,什么也没有发生。

4

1 回答 1

1

您需要将自定义类的实例添加到集合中。改变

tbCollection.Add cbox

tbCollection.Add myCheckBox

更新:

在运行时添加 OLEObjects 并运行任何其他代码似乎存在一些问题。我不知道问题是什么,但这似乎有效。

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
于 2013-09-27T21:18:42.460 回答