gpt4 book ai didi

vba - 如何从 Excel VBA 中动态加载的 OCX 库向控件添加事件处理

转载 作者:行者123 更新时间:2023-12-03 02:57:01 25 4
gpt4 key购买 nike

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

最佳答案

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

是否可以选择在设计时添加控件,然后隐藏它直到需要为止?

关于vba - 如何从 Excel VBA 中动态加载的 OCX 库向控件添加事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14055810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com