2013-09-27 57 views
0

我正在修改此線程中的答案,使其適用於我的代碼,但它不適用於我。在運行時爲複選框創建事件Excel VBA

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 

我可以看到我有新創建的複選框的參考,因爲我可以更改標題,但是當我點擊在它上面,沒有任何反應。

回答

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 
+0

嗨迪克,我根據你的回覆作出了改變,但我仍然沒有看到事件被激發,當我點擊複選框。 –

+0

謝謝!更新代碼適用於我。 –