绑定dictionary 给定关键字不再字典中_VBA数组与字典解决方案第51讲:字典嵌套及二级下拉菜单的制作...

大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第51讲:对字典嵌套的理解及二级下拉菜单的制作.

在讲字典的时候,我反复说明,字典看视非常简单,由于它具有直达性可以省略去我们大量的循环查找代码,所以使用起来要特别留意很多用法和常规思路是不一致的,对于字典的理解:

1:键key、键值(或者较项)item 是非常重要的,key 一定是字符串,具有唯一性,item 可以为任何类型的数据.

2:keys 和items 是一维数组,他们的开始是从0开始到count-1结束。

3:再次理解字典的直达性,对于给定的键,可以直接得出键值不必循环查找.

今日我们利用字典的嵌套完成一个两级下拉菜单的制作,大家要认真理解,如下面的数据:

040db7ec99d8efe7460d92247e5b19f6.png

我要在一级菜单中实现A列的数值,在二级下拉菜单中实现对应于A列的B列的值,下面看我给出的代码:

Private Sub ComboBox1_Change()

ComboBox2.Clear

'二级下拉框对应的是第一级字典的键值为键的字典

ComboBox2.List = mydic(ComboBox1.Value).keys

End Sub

Private Sub UserForm_Activate() '第51讲 字典的嵌套的理解及二级下拉菜单的制作

'将数据装入数组

myarr = Range("a1").CurrentRegion.Value

Set mydic = CreateObject("Scripting.Dictionary")

For i = 2 To UBound(myarr)

strF = myarr(i, 1)

strS = myarr(i, 2)

If Not mydic.Exists(strF) Then

'建立嵌套字典,第一重字典的键对应的键值为字典

Set mydicTemp = CreateObject("Scripting.Dictionary")

'注意下面的两种写法

'Set mydic.Item(strF) = mydicTemp

Set mydic(strF) = mydicTemp

End If

'注意下面的两种写法,嵌套字典的字典的键记入,键值为空

'mydic.Item(strF).Item(strS) = ""

mydic(strF)(strS) = ""

Next i

'一级下拉框对应的是第一级字典的键

ComboBox1.List = mydic.keys

End Sub

代码截图:

edc428197244b9de2cf757b9c6a00a0e.png

代码讲解:

1 上述代码利用了字典的嵌套,解决了两级下拉菜单的制作问题,在利用前要先加上一个窗体:

7abcedf7a17da43fcc9361723c00af74.png

2 '将数据装入数组

myarr = Range("a1").CurrentRegion.Value

上述代码将源数据写入数组中备用

3 Set mydic = CreateObject("Scripting.Dictionary")

上述代码定义外层的字典.

4 For i = 2 To UBound(myarr)

strF = myarr(i, 1)

strS = myarr(i, 2)

If Not mydic.Exists(strF) Then

'建立嵌套字典,第一重字典的键对应的键值为字典

Set mydicTemp = CreateObject("Scripting.Dictionary")

'注意下面的两种写法

'Set mydic.Item(strF) = mydicTemp

Set mydic(strF) = mydicTemp

End If

'注意下面的两种写法,嵌套字典的字典的键记入,键值为空

'mydic.Item(strF).Item(strS) = ""

mydic(strF)(strS) = ""

Next i

上述代码中利用FOR NEXT在数组中建立循环,当Not mydic.Exists(strF),将数据存入字典,键是strF ,键值是一个字典:mydicTemp,如果能够找到外层字典的键,那么将建立内层字典的,即: mydic(strF)(strS) =

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值