2015-11-05 194 views
1

我是新来的树视图控件,并愿与标题列的父节点和子头作为子节点来填充我的TreeView(两列)填充TreeView控件,如图所示:与列标题和子头

tree view

我已经开始用下面的代码,但我还是坚持了下来:

Sub UserForm_Initialize() 

    Dim WB As Workbook 
    Dim WS As Worksheet 
    Dim HeaderRng As Range 
    Dim rng As Range 
    Dim rCell As Range 
    Dim i As Long 
    Dim Nod As Node 

    Set WB = ThisWorkbook 
    Set WS = WB.Worksheets("Data") 
    Set HeaderRng = WS.Range("A1:M1") 

    With Me.TreeView1.Nodes 
     .Clear 
     For Each rCell In HeaderRng 
      .Add Key:=rCell.Value, Text:=rCell.Value 
     Next rCell 
    End With 

    TreeView1.CheckBoxes = True 
    TreeView1.Style = tvwTreelinesPlusMinusText 
    TreeView1.BorderStyle = ccFixedSingle 

End Sub 

回答

0

谢谢你的介绍的TreeView据我所知!在这个article的帮助下,我已经掌握了你的条件。

设计视图|执行的窗体的:
DesignRunning_expanded

代码(更新,以适应出HeaderRng顺序组):

Option Explicit 

Sub UserForm_Initialize() 
    With Me.TreeView1 
     .BorderStyle = ccFixedSingle 
     .CheckBoxes = True 
     .Style = tvwTreelinesPlusMinusText 
     .LineStyle = tvwRootLines 
    End With 

    UpdateTreeView 
End Sub 

Private Sub UpdateTreeView() 
    Dim WB As Workbook 
    Dim WS As Worksheet 
    Dim HeaderRng As Range 
    Dim rng As Range 
    Dim sCurrGroup As String 
    Dim sChild As String 
    Dim oNode As Node 

    Set WB = ThisWorkbook 
    Set WS = WB.Worksheets("Data") 
    With WS ' Row A are Header/Groups 
     Set HeaderRng = Intersect(.Rows(1), .UsedRange) 
    End With 

    With Me.TreeView1 
     With .Nodes 
      '.Clear 
      sCurrGroup = "" 
      For Each rng In HeaderRng 
       'Debug.Print "rng: " & rng.Address & " | " & rng.Value 
       sCurrGroup = rng.Value 
       ' Add Node only if it does NOT exists 
       Set oNode = Nothing 
       On Error Resume Next 
       Set oNode = .Item(sCurrGroup) 
       If oNode Is Nothing Then 
        'Debug.Print "Adding Group: " & sCurrGroup 
        .Add Key:=sCurrGroup, Text:=sCurrGroup 
       End If 
       On Error GoTo 0 

       ' Add the Child below the cell 
       sChild = rng.Offset(1, 0).Value 
       'Debug.Print "Adding [" & sChild & "] to [" & sCurrGroup & "]" 
       .Add Relative:=sCurrGroup, Relationship:=tvwChild, Key:=sChild, Text:=sChild 
      Next 
     End With 
     For Each oNode In .Nodes 
      oNode.Expanded = True 
     Next 
    End With 

    Set HeaderRng = Nothing 
    Set WS = Nothing 
    Set WB = Nothing 
End Sub 
+0

感谢帕特里克,但我得到一个错误“关键不在集合唯一”。任何想法? – Shan

+0

取消注释'Debug.Print“添加...'看看哪一个被视为重复,然后检查它是否在单元格中重复。如果您在其他地方调用了'UpdateTreeView',我建议您取消注释'。清除“以及 – PatricK

+0

对不起,它与.clear和调试相同.....不知道为什么 – Shan