В проекте Excel 2003 VBA я использую TreeCtrl из MSCOMCTL.OCX. Я динамически добавляю элемент управления в форму в своем приложении (см. код ниже).
Я хочу обработать событие NodeClick для TreeCtrl.
Поскольку элемент управления добавляется динамически, простое использование 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).