我们知道字典对象由关键字 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