如何将事件处理添加到Excel VBA中dynamic加载的OCX库的控件中

在Excel 2003 VBA项目中,我使用MSCOMCTL.OCX的TreeCtrl。 我将控件dynamic添加到我的应用程序中的一个表单(请参阅下面的代码)。

我想处理TreeCtrl的NodeClick事件。

由于控件是dynamic添加的,只是使用TreeCtrl_NodeClick似乎不起作用。 此外,我不能使用WithEvents approch,因为它似乎不适用于编译时不知道的types。

'Does not work. WithEvents probably only works on known data types that have events. 'private WithEvents treeCtrl As Object 'This code adds the control to the form Private Sub UserForm_Initialize() Dim treeCtrl As Object Set treeCtrl = Me.Controls.Add("MSComctlLib.TreeCtrl.2", "MyTreeCtrl") 'Does not work: AddHandler is not available in VBA. 'AddHandler TreeCtrl.NodeClick, AddressOf UserForm1.MyTreeCtrl_NodeClick End Sub 'This is supposed to be the event handler but it does not get called. Private Sub MyTreeCtrl_NodeClick(ByVal Node As Object) MsgBox "Node clicked" End Sub 

请注意,我需要dynamic加载MSCOMCTL.OCX。 我不能把它作为静态引用到我的VBA项目中(因为我的项目必须在不同版本的Excel中运行)。

根据来自MS的这个响应, “你不能处理使用Excel VBA在运行时添加的TreeView控件的事件”,虽然有一个使用VB6(!)的build议解决方法。

是在devise时join控制,然后隐藏它,直到需要一个选项?