ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > [字典嵌套]联动复合框应用(详解)

[字典嵌套]联动复合框应用(详解)

作者:绿色风 分类: 时间:2022-08-18 浏览:89
楼主
fāi
到ET来发展

  1. '点击 视图--> 立即窗口 和 本地窗口(CTRL + 9)
  2. Dim dic As New Dictionary
  3. Dim dic2 As New Dictionary
  4. Dim dic3 As New Dictionary
  5. Private Sub UserForm_Initialize()
  6.     Dim i&, s
  7.     s = Sheet1.[a1].CurrentRegion
  8.     Application.ScreenUpdating = False
  9.     For i = 1 To UBound(s)
  10.         a = s(i, 1) & "": b = s(i, 2) & "": c = s(i, 3) & "": d = s(i, 4) & ""    '& "" 数字也字符
  11.         ab = s(i, 1) & s(i, 2): abc = s(i, 1) & s(i, 2) & s(i, 3)
  12.         If dic.Exists(a) = False Then Set dic(a) = New Dictionary    '相当于 if not dic.exists(a) then dic.add a ,且在对应的 item=new dictionary;即字典嵌套字典
  13.         'tk1 = dic.keys:tm1=dic.items 'tm1,可以看到dic.items树形结构
  14.         dic(a)(b) = Empty    'dic(a)(b),dic(a)(new dictionary)中添加 b(即key值),new dictionary中b(key值)对应的item值=Empty
  15.         'tk11 = dic(a).keys '第二级的keys;dic(a).keys =查找dic(a)对应(b)[key值]的集合
  16.         'tm11 = dic(a).Items '第二级items;dic(a).items =dic(a)(b)的集合
  17.         If dic2.Exists(ab) = False Then Set dic2(ab) = New Dictionary
  18.         dic2(ab)(c) = c    'dic2(ab)(new dictionary)中添加key值 c,c对应的item值 =c
  19.         'Debug.Print dic2(ab)(c)
  20.         If dic3.Exists(abc) = False Then Set dic3(abc) = New Dictionary
  21.         dic3(abc)(d) = d
  22.         'dic3(abc)(d) = dic3(abc)(d) + 1    '显然,(1)dic3(abc)(new dictionary)中添加key值 d;(2)下一级(new dictionary) 中的对应item计数
  23.     Next
  24.     ComboBox1.List = dic.keys
  25.     Application.ScreenUpdating = True
  26.     '-----------------------字典嵌套小结-------------------
  27.     '句一:Dim dic As New Dictionary
  28.     '句二:If dic.Exists(a) = False Then Set dic(a) = New Dictionary'字典套字典
  29.     '句三:dic(a)(b) = b
  30.     '---为了易懂,补充如下句子解说
  31.     '---Dim dic As New Dictionary
  32.     '---dic(a) = Empty
  33.     '这句dic(a) = Empty   完成了(1)向dic添加key值 a(不重复);(2)dic的item值为空
  34.     '这句另一写法:If Not dic.Exists(a) Then dic.Add a, Empty
  35.     '句三:dic(a)(b) = b'注释如下:
  36.     'dic(a)(b) = b,粗看:对应二级字典赋值
  37.     '(b) 是二级字典的key值
  38.     'dic(a)(b)是二级字典的Item值
  39.     'dic(a)(b) = b' 是二级字典的Item=b'实际上,这样,二级字典上的keys=items
  40.     '上式,完成了在dic(a)对应的新建字典(new dictionary)中:(1)添加Key值(b);(2)添加Item值b
  41.     'dic(a)(b) = dic(a)(b) + 1'二级字典添加Key值 b ;对应Item计数
  42.     '---
  43.     '返回dic keys|Items:
  44.     '(1)dic.keys
  45.     '(2)dic(a).keys
  46.     '(3)dic(a).Items
  47.     '------------------------by ET fāi-------------------------
  48.     ''大家可以玩多层嵌套
  49. End Sub
  50. Private Sub ComboBox1_Click()
  51.     ComboBox2.Clear
  52.     ComboBox3.Clear
  53.     ComboBox4.Clear
  54.     ComboBox2.List = dic(ComboBox1.Text).keys
  55. End Sub
  56. Private Sub ComboBox2_Click()
  57.     ComboBox3.Clear
  58.     ComboBox4.Clear
  59.     ComboBox3.List = dic2(ComboBox1.Text & ComboBox2.Text).Items
  60.     '因: dic2(ab)(c) = c 隐含二级字典上的keys=items 故 上式可写成如下:
  61.     'ComboBox3.List = dic2(ComboBox1.Text & ComboBox2.Text).keys
  62. End Sub
  63. Private Sub ComboBox3_Click()
  64.     ComboBox4.Clear
  65.     ComboBox4.List = dic3(ComboBox1.Text & ComboBox2.Text & ComboBox3.Text).Items
  66.     'ComboBox4.List = dic3(ComboBox1.Text & ComboBox2.Text & ComboBox3.Text).keys
  67. End Sub


[字典嵌套]联动复合框应用(详解).rar
2楼
开心萝卜
太复杂,看不懂,留个记号有点基础再来
3楼
lrlxxqxa
注释很详细,收藏!

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap