打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
三级下拉菜单的制作过程

大家好,今日我们继续讲解VBA数组与字典解决方案,今日的内容是第56讲,利用字典的嵌套,完成三级下拉菜单的制作。

在第54讲中我讲了利用字典的嵌套,完成二级下拉菜单的制作,很多朋友来信反馈说不过瘾,可是三级下拉菜单自己却调试不出来.今日我就给大家讲解一下,其实这和二级菜单的制作是类似的,但是需要读者充分理解字典嵌套的含义,也就是说ITEM值可以是字典,要充分理解这时字典的意义,在大脑中模拟这个过程。

实例,如下数据,我要建立一个自定义的窗体,实现省、市、县三级菜单的互动相应,

首先我们要建立一个窗体:

下面看我给出的代码:

Private Sub ComboBox1_Change()

ComboBox2.Clear

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

If ComboBox1.Value <> '' Then ComboBox2.List = mydic(ComboBox1.Value).keys

End Sub

Private Sub ComboBox2_Change()

ComboBox3.Clear

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

If ComboBox2.Value <> '' Then ComboBox3.List = mydic(ComboBox1.Value)(ComboBox2.Value).keys

End Sub

Private Sub UserForm_Activate() '第56讲 利用字典的嵌套完成三级级下拉菜单的制作

'将数据装入数组

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

Set mydic = CreateObject('Scripting.Dictionary')

For i = 2 To UBound(myarr)

strF = myarr(i, 1)

strS = myarr(i, 2)

strT = myarr(i, 3)

If Not mydic.exists(strF) Then

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

Set mydicTemp = CreateObject('Scripting.Dictionary')

Set mydic(strF) = mydicTemp

End If

If Not mydic(strF).exists(strS) Then

Set mydicTemp2 = CreateObject('Scripting.Dictionary')

Set mydic(strF)(strS) = mydicTemp2

End If

mydic(strF)(strS)(strT) = ''

Next i

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

ComboBox1.List = mydic.keys

End Sub

Sub mynzsz_56() '第56讲 利用字典的嵌套,完成三级下拉菜单的制作

UserForm2.Show

End Sub

代码截图:

代码解析:1 上述过程实现了三级菜单的响应,在'省'的菜单中实现省一级名称菜单,在'市'一级菜单中出现对应于'省'的市级菜单,在点击'县'时会出现对应于'市'名称的县级菜单。

2 '将数据装入数组

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

上述代码将所有备用数据放到数组中

3. For i = 2 To UBound(myarr)

strF = myarr(i, 1)

strS = myarr(i, 2)

strT = myarr(i, 3)

上述代码先建立了一个FOR NEXT的循环 ,提取每一行的数据

4 If Not mydic.exists(strF) Then

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

Set mydicTemp = CreateObject('Scripting.Dictionary')

Set mydic(strF) = mydicTemp

End If

上述代码将第一级数据放到字典中作为键,对应的键值建立字典对象

5 If Not mydic(strF).exists(strS) Then

Set mydicTemp2 = CreateObject('Scripting.Dictionary')

Set mydic(strF)(strS) = mydicTemp2

End If

上述代码将第二级数据放到字典中作为键,对应的键值建立字典对象

6 mydic(strF)(strS)(strT) = ''

Next i

上述代码完善第二级数据键值对应的字典,放入键,键值为空即可.

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

ComboBox1.List = mydic.keys

上述代码给一级菜单赋值、

8 Private Sub ComboBox1_Change()

ComboBox2.Clear

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

If ComboBox1.Value <> '' Then ComboBox2.List = mydic(ComboBox1.Value).keys

End Sub

上述代码给二级菜单赋值

9 Private Sub ComboBox2_Change()

ComboBox3.Clear

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

If ComboBox2.Value <> '' Then ComboBox3.List = mydic(ComboBox1.Value)(ComboBox2.Value).keys

End Sub

上述代码给三级菜单赋值

代码的运行:

大家可以看到,应用字典实现下拉三级菜单的过程,非常的简单。

今日内容回向:

1 如何实现三级下拉菜单的响应?思路是怎么样的?

2 要理解字典ITEM值是字典后的赋值方法。

#2019生机大会#

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
下拉框 将数组
VBA字典,精准控制字典键值回填的方法
利用数组作为字典键值,实现数据快速排重及快速回填
VBA代码实现多字段排序
Igor-曾deVSTO提取唯一值(C#版本)
利用字典,统计出给定字符串中每个字符出现的次数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服