Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6137|回复: 6

[已解决]如何让VBA中的treeview控件打开后,默认全部收缩

[复制链接]
发表于 2012-9-2 19:25 | 显示全部楼层 |阅读模式
请教各位大侠,我按别人的代码进行treeview树状结构设置,但点击后,树状结构的内容默认是全部展开的,这对于选择相应内容有点不方便,该如何设置打开此控件时,内容是默认成收缩状的
最佳答案
2012-9-2 21:03
看得头晕,没看完。你在窗体初始化代码中加上下面这些代码试一下吧

  1. For i = 1 To TreeView1.Nodes.Count
  2.      TreeView1.Nodes(i).Expanded = False
  3. Next
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-9-2 19:49 | 显示全部楼层
不知道你的代码是怎样的,所以只能给你提个参考:设置某节点(node)的expanded属性为false即可把该节点收缩。
回复

使用道具 举报

 楼主| 发表于 2012-9-2 19:59 | 显示全部楼层
  1. Private Sub UserForm_Initialize()
  2. Dim objHeaderRange As Range
  3. Dim aintLevelNodesCount(10) As Integer
  4. Dim intCurNodeLevel As Integer
  5. Dim lngCurRowOffset As Long
  6. Dim strNodeKey As String, strParentNodeKey As String
  7. Dim l As Long
  8. On Error Resume Next
  9.     TreeView1.HideSelection = False
  10.     TreeView1.LineStyle = tvwRootLines  '显示出表示可扩展节点的“+”号
  11.     Me.Caption = "会计科目"
  12.    
  13.     Erase aintLevelNodesCount
  14.     intCurNodeLevel = 1
  15.     lngCurRowOffset = 1
  16.    
  17.     With TreeView1
  18.         .Nodes.Clear
  19.         
  20.         Set objHeaderRange = Sheet1.Range("rHeaderLevel")
  21.         If objHeaderRange.Offset(lngCurRowOffset, 0).Value <> 1 Then GoTo label_Exit
  22.         
  23.         aintLevelNodesCount(intCurNodeLevel) = 1
  24.         strNodeKey = "Level" & aintLevelNodesCount(intCurNodeLevel)
  25.         
  26.         ' 加入第一个节点
  27.         .Nodes.Add Key:=strNodeKey, Text:=objHeaderRange.Offset(lngCurRowOffset, -1).Value
  28.         
  29.         lngCurRowOffset = lngCurRowOffset + 1
  30.         
  31.         While objHeaderRange.Offset(lngCurRowOffset, 0).Value <> ""
  32.             intCurNodeLevel = objHeaderRange.Offset(lngCurRowOffset, 0).Value
  33.             
  34.             If objHeaderRange.Offset(lngCurRowOffset, 0).Value < objHeaderRange.Offset(lngCurRowOffset - 1, 0).Value Then
  35.                 aintLevelNodesCount(intCurNodeLevel + 1) = 0
  36.             End If
  37.             
  38.             aintLevelNodesCount(intCurNodeLevel) = aintLevelNodesCount(intCurNodeLevel) + 1
  39.             
  40.             strNodeKey = "Level"
  41.             
  42.             For l = 1 To intCurNodeLevel
  43.                 strNodeKey = strNodeKey & aintLevelNodesCount(l)
  44.             Next l
  45.             
  46.             If objHeaderRange.Offset(lngCurRowOffset, 0).Value = 1 Then
  47.             ' add a root node
  48.                 .Nodes.Add Key:=strNodeKey, _
  49.                         Text:=objHeaderRange.Offset(lngCurRowOffset, -1).Value
  50.             Else
  51.             ' add a child node
  52.                 strParentNodeKey = "Level"
  53.                
  54.                 For l = 1 To intCurNodeLevel - 1
  55.                     strParentNodeKey = strParentNodeKey & aintLevelNodesCount(l)
  56.                 Next l
  57.                
  58.                 .Nodes.Add Relative:=strParentNodeKey, Relationship:=4, Key:=strNodeKey, _
  59.                         Text:=objHeaderRange.Offset(lngCurRowOffset, -1).Value
  60.             End If
  61.             lngCurRowOffset = lngCurRowOffset + 1
  62.         Wend
  63.         
  64.         Debug.Print .Nodes.Count
  65.         
  66.         For l = 1 To .Nodes.Count
  67.             .Nodes(l).EnsureVisible
  68.         Next l
  69.         
  70.         strNodeKey = "Level1"
  71.         .Nodes(strNodeKey).Selected = True
  72.     End With

  73. label_Exit:
  74.     Set objHeaderRange = Nothing
  75.    
  76. End Sub
复制代码
我的代码是这样的
回复

使用道具 举报

发表于 2012-9-2 21:03 | 显示全部楼层    本楼为最佳答案   
看得头晕,没看完。你在窗体初始化代码中加上下面这些代码试一下吧

  1. For i = 1 To TreeView1.Nodes.Count
  2.      TreeView1.Nodes(i).Expanded = False
  3. Next
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-9-2 21:19 | 显示全部楼层
放在什么位置上?
回复

使用道具 举报

 楼主| 发表于 2012-9-2 21:21 | 显示全部楼层
自己测试成功了,谢谢
回复

使用道具 举报

发表于 2016-12-4 20:03 | 显示全部楼层
Private Sub UserForm_Initialize()      
    Set NodX = TreeView1.Nodes.Add(, , "课程科目", "课程科目")
    NodX.BackColor = &HFF&
    Set NodX = TreeView1.Nodes.Add("课程科目", tvwChild, "语文", "语文")
    Set NodX = TreeView1.Nodes.Add("课程科目", tvwChild, "数学", "数学")
    Set NodX = TreeView1.Nodes.Add("课程科目", tvwChild, "外语", "外语")
    Set NodX = TreeView1.Nodes.Add("课程科目", tvwChild, "政治", "政治")
    Set NodX = TreeView1.Nodes.Add("课程科目", tvwChild, "物理", "物理")
    Set NodX = TreeView1.Nodes.Add("课程科目", tvwChild, "化学", "化学")
    Set NodX = TreeView1.Nodes.Add("课程科目", tvwChild, "生物", "生物")
    Dim i As Long
    For i = 2 To TreeView1.Nodes.Count
        TreeView1.Nodes(i).BackColor = &HFFFF&
        TreeView1.Nodes(i).Expanded = False
    Next i   
    '以下是对兰色幻想老师的代码作了改动的树代码
    'TreeView2.ImageList = ImageList1我不喜欢带图标
    Set NodX = TreeView2.Nodes.Add(, , "总行", "商业银行 网点:")
    NodX.BackColor = &HFF&
    For x = 2 To [A65536].End(xlUp).Row
        Text = Cells(x, "A")
        Number = Cells(x, "B")
        If Len(Cells(x, "B")) = 1 Then
            Set NodX = TreeView2.Nodes.Add("总行", tvwChild, "key" & Number, Number & " " & Text)
            NodX.BackColor = &HFFFF&
        ElseIf Len(Cells(x, "B")) = 3 Then
            Set NodX = TreeView2.Nodes.Add("key" & Left(Number, 1), tvwChild, "key" & Number, Number & " " & Text)
            NodX.BackColor = &HFFFF00
        ElseIf Len(Cells(x, "B")) = 5 Then
            Set NodX = TreeView2.Nodes.Add("key" & Left(Number, 3), tvwChild, "key" & Number, Number & " " & Text)
            NodX.BackColor = &HFF00FF
        End If
    Next
    Set NodX = Nothing
End Sub昨天,我在树代码中加了Set NodX = Nothing,没有加 TreeView1.Nodes(i).Expanded = False,节点会默认隐藏,今天树节点不会隐藏了,加了 TreeView1.Nodes(i).Expanded = False,也没用,不知什么原因?兰色幻想老师的树代码,什么也不用加,都会默认隐藏节点,不知为何?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-21 02:28 , Processed in 0.288278 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表