ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2979|回复: 16

[求助] 数组直接在树形控件中显示问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-5-29 08:18 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请教:
表一中原有2列数据,想将其中1列是日期的分拆后,形成一个新数组在树形控件中,
以“年度”和“月份”显示。试做了不成功,请大师帮忙,谢谢!

树型控件的显示.rar (32.79 KB, 下载次数: 111)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-29 12:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
闻启学 发表于 2014-5-29 12:21
已经修改

试了,OK!太感谢了!!!
今天的鲜花用完了,明天补上。谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-29 12:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
闻启学 发表于 2014-5-29 12:21
已经修改

又麻烦老师了,再请问:如何实现“单号”的双击及单击的触发事件?

TA的精华主题

TA的得分主题

发表于 2014-5-29 10:37 | 显示全部楼层
我 做了大概
不完美 让高手来完善吧

  1. Private Sub UserForm_Initialize()
  2.     Dim nodex As Node
  3.     Dim rng As Range
  4.     Dim brr(), crr, arr
  5.     Dim aa, bb, i&, d, r

  6.     Dim rootnode

  7.     Dim tmp As String

  8.     Dim tmpmonth As String

  9.     Dim mrr


  10.     Set d = CreateObject("scripting.dictionary")

  11.     Set dm = CreateObject("scripting.dictionary")
  12.     Sheet1.Activate    '激活表1


  13.     With TreeView1    '设置TreeView控件属性
  14.         .Nodes.Clear
  15.         .Style = 6
  16.         .LineStyle = 1

  17.         Set d = CreateObject("Scripting.Dictionary")
  18.         With Worksheets("明细统计表")
  19.             r = .Cells(.Rows.Count, 4).End(xlUp).Row
  20.             Set rng = .Range("D4:E" & r)
  21.             crr = rng

  22.             ReDim brr(1 To UBound(crr), 1 To 3)

  23.             '//分解日期

  24.             For i = 1 To UBound(crr)
  25.                 brr(i, 1) = Split(crr(i, 2), "/")(0)    '//年

  26.                 brr(i, 2) = Split(crr(i, 2), "/")(1)    '//月
  27.                 brr(i, 3) = crr(i, 1)
  28.             Next i

  29.             '//放入字典
  30.             For i = 1 To UBound(brr)     '删除重复号码
  31.                 If brr(i, 1) <> "" Then     '删除空行
  32.                     d(brr(i, 1)) = d(brr(i, 1)) & " |" & brr(i, 2)
  33.                 End If
  34.             Next

  35.         End With

  36.         .Nodes.Clear

  37.         Set nodex = .Nodes.Add(, , "年度", "年度")    '添加根节点



  38.         For Each rootnode In d.keys
  39.             m = m + 1
  40.             tmp = CStr(rootnode) & "年"
  41.             Set nodex = .Nodes.Add("年度", tvwChild, Key:=tmp, Text:=tmp)                  '添加二级节点 年份
  42.             '
  43.             mrr = Split(d(rootnode), "|")
  44.             For k = 1 To UBound(mrr)
  45.                 dm(Trim(mrr(k))) = ""
  46.             Next
  47.             mrr = dm.keys
  48.             dm.RemoveAll
  49.             '            n = 0
  50.             For k = 0 To UBound(mrr)
  51.                 '                n = n + 1

  52.                 tmpmonth = mrr(k) & "月"
  53.                 Debug.Print tmpmonth
  54.                 Set nodex = .Nodes.Add(tmp, tvwChild, tmpmonth & n, tmpmonth & n)    '添加三级节点 月份

  55.             Next


  56.         Next
  57.         '//  Set d = Nothing
  58.     End With
  59. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-29 10:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
闻启学 发表于 2014-5-29 10:37
我 做了大概
不完美 让高手来完善吧

先谢谢您!

试了出现“关键字不唯一”

QQ截图20140529104155.jpg

TA的精华主题

TA的得分主题

发表于 2014-5-29 10:48 | 显示全部楼层
这个可以通过的
  1. Private Sub UserForm_Initialize()
  2.     Dim nodex As Node
  3.     Dim rng As Range
  4.     Dim brr(), crr, arr
  5.     Dim aa, bb, i&, d, r

  6.     Dim rootnode

  7.     Dim tmp As String

  8.     Dim tmpmonth As String

  9.     Dim mrr


  10.     Set d = CreateObject("scripting.dictionary")

  11.     Set dm = CreateObject("scripting.dictionary")
  12.     Sheet1.Activate    '激活表1


  13.     With TreeView1    '设置TreeView控件属性
  14.         .Nodes.Clear
  15.         .Style = 6
  16.         .LineStyle = 1

  17.         Set d = CreateObject("Scripting.Dictionary")
  18.         With Worksheets("明细统计表")
  19.             r = .Cells(.Rows.Count, 4).End(xlUp).Row
  20.             Set rng = .Range("D4:E" & r)
  21.             crr = rng

  22.             ReDim brr(1 To UBound(crr), 1 To 3)

  23.             '//分解日期

  24.             For i = 1 To UBound(crr)
  25.                 brr(i, 1) = Split(crr(i, 2), "/")(0)    '//年

  26.                 brr(i, 2) = Split(crr(i, 2), "/")(1)    '//月
  27.                 brr(i, 3) = crr(i, 1)
  28.             Next i

  29.             '//放入字典
  30.             For i = 1 To UBound(brr)     '删除重复号码
  31.                 If brr(i, 1) <> "" Then     '删除空行
  32.                     d(brr(i, 1)) = d(brr(i, 1)) & " |" & brr(i, 2)
  33.                 End If
  34.             Next

  35.         End With

  36.         .Nodes.Clear

  37.         Set nodex = .Nodes.Add(, , "年度", "年度")    '添加根节点
  38.         For Each rootnode In d.keys
  39.             m = m + 1
  40.             tmp = CStr(rootnode) & "年"
  41.             Set nodex = .Nodes.Add("年度", tvwChild, Key:=tmp, Text:=tmp)                  '添加二级节点 年份
  42.             '
  43.             mrr = Split(d(rootnode), "|")
  44.             For k = 1 To UBound(mrr)
  45.                 dm(Trim(mrr(k))) = ""
  46.             Next
  47.             mrr = dm.keys
  48.             dm.RemoveAll
  49.             n = 0
  50.             For k = 0 To UBound(mrr)
  51.                 n = n + 1
  52.                 tmpmonth = mrr(k) & "月"
  53.                 Debug.Print tmpmonth
  54.                 Set nodex = .Nodes.Add(tmp, tvwChild, tmpmonth & n, tmpmonth)     '添加三级节点 月份
  55.                
  56.                 '//key 不可以重复 ?
  57.                 '//不在不同分支都不可以??
  58.             Next
  59.         Next
  60.         '//  Set d = Nothing
  61.     End With
  62. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-29 10:54 | 显示全部楼层
闻启学 发表于 2014-5-29 10:48
这个可以通过的

基本达到目的了,谢谢!

将单号在月份后面显示,怎么增加一级呢?再次谢谢!

TA的精华主题

TA的得分主题

发表于 2014-5-29 12:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
鄂龙蒙 发表于 2014-5-29 10:54
基本达到目的了,谢谢!

将单号在月份后面显示,怎么增加一级呢?再次谢谢!

已经修改
  1. Private Sub UserForm_Initialize()
  2.     Dim nodex As Node
  3.     Dim rng As Range
  4.     Dim brr(), crr, arr
  5.     Dim aa, bb, i&, d, r

  6.     Dim rootnode

  7.     Dim tmp As String

  8.     Dim tmpmonth As String

  9.     Dim mrr

  10.     Dim itemarr


  11.     Set d = CreateObject("scripting.dictionary")

  12.     Set dm = CreateObject("scripting.dictionary")
  13.     Sheet1.Activate    '激活表1


  14.     With TreeView1    '设置TreeView控件属性
  15.         .Nodes.Clear
  16.         .Style = 6
  17.         .LineStyle = 1

  18.         Set d = CreateObject("Scripting.Dictionary")
  19.         With Worksheets("明细统计表")
  20.             r = .Cells(.Rows.Count, 4).End(xlUp).Row
  21.             Set rng = .Range("D4:E" & r)
  22.             crr = rng

  23.             ReDim brr(1 To UBound(crr), 1 To 3)

  24.             '//分解日期

  25.             For i = 1 To UBound(crr)
  26.                 brr(i, 1) = Split(crr(i, 2), "/")(0)    '//年

  27.                 brr(i, 2) = Format(Split(crr(i, 2), "/")(1), "00")   '//月
  28.                 brr(i, 3) = crr(i, 1)
  29.             Next i

  30.             '//放入字典
  31.             For i = 1 To UBound(brr)     '删除重复号码
  32.                 If brr(i, 1) <> "" Then     '删除空行
  33.                     d(brr(i, 1)) = d(brr(i, 1)) & "|" & brr(i, 2) & "," & brr(i, 3)


  34.                 End If
  35.             Next

  36.         End With

  37.         .Nodes.Clear

  38.         Dim tmpmonths As String

  39.         Dim dannumber As String

  40.         Set nodex = .Nodes.Add(, , "年度", "年度")    '添加根节点
  41.         For Each rootnode In myarrs(d.keys)
  42.             m = m + 1
  43.             tmp = CStr(rootnode) & "年"
  44.             Debug.Print rootnode

  45.             Set nodex = .Nodes.Add("年度", tvwChild, Key:=tmp, Text:=tmp)                  '添加二级节点 年份
  46.             '
  47.             mrr = Split(d(rootnode), "|")



  48.             For k = 1 To UBound(mrr)
  49.                 tmpmonths = Split(mrr(k), ",")(0)  '//月

  50.                 dannumber = Split(mrr(k), ",")(1)    '//单号
  51.                 dm(tmpmonths) = dm(tmpmonths) & "|" & dannumber
  52.            
  53.             Next

  54.             mrr = myarrs(dm.keys)

  55.             '// itemarr = myarrs(dm.items)
  56.             Dim l As Integer

  57.             n = 0
  58.             For k = 0 To UBound(mrr)

  59.                 tmpmonth = mrr(k) & "月"
  60.                 Debug.Print tmpmonth
  61.                 Set nodex = .Nodes.Add(tmp, tvwChild, rootnode & tmpmonth, tmpmonth)      '添加三级节点 月份
  62.                 Debug.Print dm(mrr(k))
  63.                 itemarr = myarrs(Split(dm(mrr(k)), "|"))

  64.                 For l = 1 To UBound(itemarr)
  65.                     n = n + 1
  66.                     Set nodex = .Nodes.Add(rootnode & tmpmonth, tvwChild, rootnode & tmpmonth & itemarr(l) & n, itemarr(l))

  67.                 Next

  68.                 '//key 不可以重复 ?
  69.                 '//不在不同分支都不可以??
  70.             Next
  71.             dm.RemoveAll
  72.         Next
  73.         '//  Set d = Nothing
  74.     End With
  75. End Sub

  76. Function myarrs(tmparr)

  77.     Dim tmp As Variant
  78.     For i = 0 To UBound(tmparr) - 1
  79.         For j = 0 To UBound(tmparr) - (i + 1)
  80.             If tmparr(j) > tmparr(j + 1) Then
  81.                 tmp = tmparr(j): tmparr(j) = tmparr(j + 1): tmparr(j + 1) = tmp
  82.             End If
  83.         Next j
  84.     Next i
  85.     myarrs = tmparr
  86. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-5-29 12:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
鄂龙蒙 发表于 2014-5-29 12:36
又麻烦老师了,再请问:如何实现“单号”的双击及单击的触发事件?

?????????????????

怎么回事

TA的精华主题

TA的得分主题

发表于 2015-1-10 22:35 | 显示全部楼层
闻启学 发表于 2014-5-29 12:21
已经修改

请教大侠,不能打开窗体,显示如图所示,请问如何解决?谢谢!

系统错误.jpg 内存溢出.jpg

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 07:08 , Processed in 0.048227 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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