我目前正在使用 Treeview Control from JKP 中的 TreeView 控件。尝试使用 Excel 工作表中的分层数据填充树时,我遇到了这个问题:我填充的树不反射(reflect)数据。在此图中,AP0004
应位于 TP0002
我尝试过的代码是这样的
For Each c In Sheet14.Range("A2:A" & Sheet14.Range("A" & Rows.Count).End(xlUp).Row)
On Error Resume Next
'Populate level 1
Set cRoot = .AddRoot(sKey:=c.Value2, vCaption:=c.Value2)
Set cExtraNode = cRoot.AddChild("ML_" & c.Value2, "Meilensteine")
'Populate level 2
Set cNode = cRoot.AddChild(c.Offset(, 1).Value2, c.Offset(, 1).Value2)
'Populate level 3
If cNode.Level = 2 Then Set cNode = cNode.ParentNode
If Not IsEmpty(c.Offset(, 2).Value2) Then
Set cNode = cNode.AddChild(c.Offset(, 2).Value2, c.Offset(, 2).Value2)
End If
'Populate level 4
If Not IsEmpty(c.Offset(, 3).Value2) Then
If cNode.Level = 2 Then
Set cNode = cNode.AddChild(c.Offset(, 3).Value2, c.Offset(, 3).Value2)
Set cNode = cNode.ParentNode
ElseIf cNode.Level = 1 Then
Set cNode = cNode.Child.AddChild(c.Offset(, 2).Value2, c.Offset(, 2).Value2)
Set cNode = cNode.Child.AddChild(c.Offset(, 3).Value2, c.Offset(, 3).Value2)
Set cNode = cNode.ParentNode
End If
End If
Next
我的做法肯定有问题。有什么建议吗?
最佳答案
我猜它就在这附近:
Set cNode = cNode.Child.AddChild(c.Offset(, 3).Value2, c.Offset(, 3).Value2)
cNode.Child
只需选择 cNode
的第一个 child ,不是您想要的。
请注意 AP003 是 TP002 下的唯一节点,因为它是创建 TP002 的情况。
<小时/>一般说明:全局On Error Resume Next
看起来很优雅,让您无需检查节点是否已存在,但它也会掩盖可能出现的任何其他错误。
恕我直言,更好的方法是始终检查:我需要的父节点是否已经存在?
如果是,这将为您提供添加子节点所需的节点。
如果没有,则创建它,然后您也有了父节点。
关于vba - 使用 Excel 工作表中的分层数据填充 TreeView 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34039831/