2

在 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 中运行)。

4

1 回答 1

3

根据MS 的此响应“您无法处理使用 Excel VBA 在运行时添加的 TreeView 控件的事件”,尽管有使用 VB6(!)的建议解决方法。

是否在设计时添加控件,然后隐藏它直到需要一个选项?

于 2012-12-27T14:16:12.713 回答