字典的应用

我们知道字典对象由关键字 Key 和数据项 Item 构成。通常情况下 Key 是字符串,实际上也可以是其它数据类型,比如整数、小数等。而数据项则可以是任何数据类型,包括字典对象本身。这样我们就可以创建多层的字典对象了。利用多层字典对象,我们可以实现诸如级联菜单、联动数据有效性序列、联动下拉框等等应用

例子

 1 Option Explicit
 2 Public Const PR_SALARY_GROUP = "班组"
 3 Public Const PR_SALARY_POSITION = "工位"
 4 Public Const PR_SALARY_NAME = "姓名"
 5 Public Const PR_SALARY_BASE = "基本工资"
 6 Public Const PR_SALARY_BONUS = "绩效奖金"
 7 
 8 Sub Main()
 9     Dim Ar
10     Debug.Print ParseData("")("焊接")("B")("基本工资")
11 End Sub
12 
13 Public Function ParseData()
14     Dim DTitle, Arr, I&, Dic, DTemp
15     Arr = Sheet1.[a1].CurrentRegion
16     Set DTitle = CreateObject("Scripting.Dictionary")
17     '======列字段字典=======
18     For I = 1 To UBound(Arr, 2)
19         DTitle(Arr(1, I)) = I
20     Next
21     
22     Set Dic = CreateObject("Scripting.Dictionary")
23     For I = 2 To UBound(Arr)
24         '依据(班组)创建字典
25         If Not Dic.Exists(Arr(I, DTitle(PR_SALARY_GROUP))) Then _
26             Set Dic(Arr(I, DTitle(PR_SALARY_GROUP))) = _
27             CreateObject("Scripting.Dictionary")
28             
29         Set DTemp = Dic(Arr(I, DTitle(PR_SALARY_GROUP)))
30         '依据(班组)(工位)创建字典
31         If Not DTemp.Exists(Arr(I, DTitle(PR_SALARY_POSITION))) Then _
32             Set DTemp(Arr(I, DTitle(PR_SALARY_POSITION))) = _
33             CreateObject("Scripting.Dictionary")
34             
35         Set DTemp = DTemp(Arr(I, DTitle(PR_SALARY_POSITION)))
36         '依据(班组)(工位)(姓名)创建字典
37         If Not DTemp.Exists(Arr(I, DTitle(PR_SALARY_NAME))) Then _
38             Set DTemp(Arr(I, DTitle(PR_SALARY_NAME))) = _
39             CreateObject("Scripting.Dictionary")
40             
41         Set DTemp = DTemp(Arr(I, DTitle(PR_SALARY_NAME)))
42         '字典(班组)(工位)(姓名) & (基本工资) =Arr(I, DTitle(PR_SALARY_BASE))
43         DTemp(PR_SALARY_BASE) = Arr(I, DTitle(PR_SALARY_BASE))
44         '字典(班组)(工位)(姓名) & (绩效奖金) =Arr(I, DTitle(PR_SALARY_BONUS))
45         DTemp(PR_SALARY_BONUS) = Arr(I, DTitle(PR_SALARY_BONUS))
46     Next
47     'dic(班组)(工位)(姓名) &(基本工资|绩效奖金)=基本工资|绩效奖金
48     Set ParseData = Dic
49     Set DTitle = Nothing
50     Set DTemp = Nothing
51     Set Dic = Nothing
52 End Function

dicSalary字典树型结构

    ├─甲班

    │   ├─拼装

    │   │   ├─张三

    │   │   │   ├─基本工资 -> $1000

    │   │   │   │

    │   │   │   └─绩效奖金 -> $800

    │   │   │

    │   │   └─李四

    │   │        ├─基本工资 -> $1000

    │   │        │

    │   │        └─绩效奖金 -> $800

    │   │

    │   └─焊接

    │        ├─王二麻子

    │        │   ├─基本工资 -> $1100  

    │        │   │

    │        │   └─绩效奖金 -> $900

    │        │

    │        └─赵大

    │             ├─基本工资 -> $1100

    │             │

    │             └─绩效奖金 -> $900

    │

    └─乙班

         ├─拼装

         │   ├─诸葛

         │   │   ├─基本工资 -> $1000

         │   │   │

         │   │   └─绩效奖金 -> $800

         │   │

         │   └─南宫

         │        ├─基本工资 -> $1000

         │        │

         │        └─绩效奖金 -> $800

         │

         └─焊接

              ├─西门

              │   ├─基本工资 -> $1100

              │   │

              │   └─绩效奖金 -> $900

              │

              └─轩辕

                   ├─基本工资 -> $1100

                   │

                   └─绩效奖金 -> $900

原文地址:https://www.cnblogs.com/Ionefox/p/10261309.html