使用VBA在TreeView中选择一个节点

时间:2009-01-19 23:20:39

标签: excel vba excel-vba treeview

我在Excel中的TreeView内有一个UserForm。 从TreeView中选择节点后,ListBox会填充数据 当双击ListBox中的项目时,会显示一个单独的UserForm,允许用户填写内容。
用户返回TreeView UserForm后,我希望以前选择的Node突出显示。

问题是UserForm基本上会自行重置,我无法弄清楚如何选择带有VBA的Node

我正在讨论是否可以手动触发NodeClick事件,因为我尝试过的其他事情都失败了。

任何提示?

5 个答案:

答案 0 :(得分:3)

我知道这是一个古老的问题,但我自己很难找到一个体面的答案,所以我们走了。索引或密钥并非始终可用。在创建时,我将节点的完整路径放在node.tag中。双击我回忆标签值,稍后我在树视图节点集合中搜索标签。要多吗?效率不高?也许,但它的作品每次都喜欢魅力,我可以根据树视图的目的在标签中使用我自己的标识符。查找代码:

Sub MyTreeview_FindNode(strKey As String)
Dim myNode As Node

   For Each myNode In Me.Treeview.Nodes
       If myNode.Tag = strKey Then
          myNode.Selected = True
          myNode.EnsureVisible
          End If
       Next
End Sub 

答案 1 :(得分:2)

在我的Excel作品中:

TreeView1.Nodes(key).Selected = True

答案 2 :(得分:1)

您有几种选择。首先,当TreeView UserForm显示第二个UserForm时,您需要:

  1. 保存所选节点的ID(使用表单级或模块级变量)。然后,您需要编写一个方法来在返回表单时选择节点。 IIRC,您需要为每个节点元素提供唯一的“密钥”或ID,然后使用TreeView.Select作为从TreeView.FindNode返回的节点。 - 或 -
  2. 隐藏TreeView用户窗体而不是关闭它(Me.Hide)。当第二个UserForm关闭(或按下确定/取消)时,再次显示TreeView用户窗体(TreeViewForm.Show)。

答案 3 :(得分:0)

试试这个: objTreeview.Object.Nodes(KEY_NAME).Selected = TRUE

KEY_NAME是您用于创建节点的键(字符串)

答案 4 :(得分:0)

Set xTree = Me!tv_bom.Object
        
xTree.Nodes.Item(Index).Selected = True