首页 > 解决方案 > Excel VBA 检测用户是否在树视图上选择父节点或子节点

问题描述

我有一个用户表单,其中包含一个树视图和 2 个框架,每个框架都有几个文本框、标签等。

如果用户选择某些父母或他们的任何孩子,我想隐藏 1 个用户窗体框架。
使用下面的代码,如果用户选择了一个孩子,我可以隐藏框架,但如果用户选择一个父母,我会收到运行时错误 91“对象变量或未设置块变量”</p>

将 Node.Parent 更改为 Node.Key 会在选择父项时隐藏框架,但在选择子项时不会。如果选择任何一个,如何隐藏框架?欢迎任何指导。

If Node.Parent = "North" Or Node.Parent = "South" Or Node.Parent = "East” _
or Node.Parent = "West" Then
UserForm1.Frame1.Visible = False

标签: excelvba

解决方案


If Userform1.TreeView1.Nodes(<name of node>).Parent Is Nothing Then
    <this is a parent node>
Else
    <this is a child node>
End If

您可以在“mousedown”事件期间使用 hittest 获取所选节点的名称。按钮、shift、x 和 y 由事件自动填充

Private Sub TreeView1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)

        'hittest is looking at twips, x,y=pixels. 15 twips to a pixel (*15) to make it 
         <name of node> = TreeView1.HitTest(x * 15, y * 15)
End Sub

推荐阅读