在 Excel 2003 VBA 项目中,我使用的是 MSCOMCTL.OCX 中的 TreeCtrl。我将控件动态添加到我的应用程序中的表单中(请参见下面的代码)。
我想处理 TreeCtrl 的 NodeClick 事件。
由于控件是动态添加的,因此仅使用 TreeCtrl_NodeClick 似乎不起作用。我也不能使用 WithEvents 方法,因为它似乎不适用于编译时未知的类型。
'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
请注意,我需要动态加载 MSCOMCTL.OCX。我不能将它作为静态引用放入我的 VBA 项目中(因为我的项目必须在不同版本的 Excel 中运行)。