使用VBA在TreeView中select一个节点

我在Excel中的UserForm TreeView体内有一个TreeView 。 当从TreeViewselect一个节点时,一个ListBox被填充数据。
当双击ListBox的项目时,会显示一个单独的UserForm ,它允许用户填充内容。
一旦用户返回到TreeView UserForm ,我想要先前select的Node被突出显示。

问题是, UserForm基本上重置自己,我不知道如何select与VBA Node

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

有小费吗?

我知道这是一个古老的问题,但我有足够的麻烦find一个体面的答案我自己,所以我们走了。 索引或键不总是可用的。 在创build时,我将节点的完整path放在node.tag中。 双击我记得的标签值,稍后我search标签的treeview节点集合。 要多less? 不高效? 也许,但是它的作品每次都很迷人,我可以根据树视图的目的在标签中使用自己的标识符。 查找代码:

 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 

你有几个select。 首先,当TreeView UserForm显示第二个UserForm时,您需要:

  1. 保存所选节点的ID(使用表单级或模块级variables)。 然后你需要编写一个方法来select返回到表单的节点。 IIRC,您需要为每个节点元素都有一个唯一的“密钥”或ID,然后使用TreeView.Select从TreeView.FindNode返回的节点。 – 要么 –
  2. 隐藏TreeView UserForm而不是closures它(Me.Hide)。 当第二个用户窗体closures(或确定/取消按),然后再次显示TreeView UserForm(TreeViewForm.Show)。

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

KEY_NAME是您用来创build节点的关键字(string)

在我的Excel工程中:

 TreeView1.Nodes(key).Selected = True