三级下拉菜单制作过程,3级下拉菜单制作方法

首页 > 数码 > 作者:YD1662024-04-29 00:23:36

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

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

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

三级下拉菜单制作过程,3级下拉菜单制作方法(1)

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

三级下拉菜单制作过程,3级下拉菜单制作方法(2)

下面看我给出的代码:

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

代码截图:

三级下拉菜单制作过程,3级下拉菜单制作方法(3)

代码解析: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

上述代码给三级菜单赋值

代码的运行:

三级下拉菜单制作过程,3级下拉菜单制作方法(4)

三级下拉菜单制作过程,3级下拉菜单制作方法(5)

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

今日内容回向:

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

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

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.