使用VBA在TreeView中select一个节点
我在Excel中的UserForm
TreeView
体内有一个TreeView
。 当从TreeView
select一个节点时,一个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时,您需要:
- 保存所选节点的ID(使用表单级或模块级variables)。 然后你需要编写一个方法来select返回到表单的节点。 IIRC,您需要为每个节点元素都有一个唯一的“密钥”或ID,然后使用TreeView.Select从TreeView.FindNode返回的节点。 – 要么 –
- 隐藏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