使用Excel工作表中的分层数据填充树视图控件

时间:2015-12-02 10:02:13

标签: excel vba excel-vba treeview

我目前正在使用Treeview Control from JKP的树视图控件。尝试使用Excel工作表中的分层数据填充树,我遇到了这个问题:我填充的树不反映数据。在此图片中,$session = New-PSSession -ComputerName $server 应位于AP0004

Populate a treeview control in VBA

我尝试过的代码是

TP0002

我的方法一定有问题。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我想它就在这附近:

Set cNode = cNode.Child.AddChild(c.Offset(, 3).Value2, c.Offset(, 3).Value2)

cNode.Child只选择cNode的第一个孩子,而不是您想要的孩子。

注意AP003是TP002下的唯一节点,因为它是创建TP002的情况。

一般说明:全局On Error Resume Next可能看起来很优雅,无需检查节点是否已存在,但它也会掩盖可能出现的任何其他错误。

恕我直言,更好的方法是始终检查:我需要的父节点是否已经存在? 如果是,这将为您提供添加孩子所需的节点 如果不是,请创建它,然后您也有父节点。

答案 1 :(得分:1)

好的,我现在知道了。我知道它的意大利面条代码,但是现在它有效。

对于未来的人,可能需要这个

lastRow = Sheet14.Range("A" & Rows.Count).End(xlUp).Row
' root nodes
For Each c In Sheet14.Range("A2:A" & lastRow)
    If cRoot Is Nothing Then
        Set cRoot = .AddRoot(sKey:=c.Value2, vCaption:=c.Value2)
        cRoot.Bold = True
        currentRootKey = cRoot.key
        Set cExtraNode = cRoot.AddChild("ML_" & c.Value2, "Meilensteine")
        currentMLKey = cExtraNode.key
    End If
    If c.Value2 <> currentRootKey Then
        Set cRoot = .AddRoot(sKey:=c.Value2, vCaption:=c.Value2)
        cRoot.Bold = True
        currentRootKey = cRoot.key

        Set cExtraNode = cRoot.AddChild("ML_" & c.Value2, "Meilensteine")
        currentMLKey = cExtraNode.key
    End If
Next
' level 1 children
For Each c In Sheet14.Range("B2:B" & lastRow)
    If Not IsEmpty(c.Value2) And c.Value2 <> currNodeKey Then
        Set cNode = .Nodes(c.Offset(, -1).Value2)
        Set cNode = cNode.AddChild(c.Value2, c.Value2)
        currNodeKey = cNode.key
    End If
Next
'level 2 children
For Each c In Sheet14.Range("C2:C" & lastRow)
    If Not IsEmpty(c.Value2) And c.Value2 <> currNodeKey Then
        Set cNode = .Nodes(c.Offset(, -1).Value2)
        Set cNode = cNode.AddChild(c.Value2, c.Value2)
        currNodeKey = cNode.key
    End If
Next
'level 3 children
For Each c In Sheet14.Range("D2:D" & lastRow)
    If Not IsEmpty(c.Value2) And c.Value2 <> currNodeKey Then
        Set cNode = .Nodes(c.Offset(, -1).Value2)
        Set cNode = cNode.AddChild(c.Value2, c.Value2)
        currNodeKey = cNode.key
    End If
Next