三级下拉菜单的制作过程

大家好,今日我们继续讲解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生机大会#

(0)

相关推荐

  • 下拉框 将数组

    大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第51讲:对字典嵌套的理解及二级下拉菜单的制作. 在讲字典的时候,我反复说明,字典看视非常简单,由于它具有直达性可以省略去我们大量的循环查找代 ...

  • 数组字典

    大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第39讲,利用数组与字典,实现双条件数据汇总的方法.大家或许在之前没有接触过字典,其实,字典在VBA中占据着很重要的内容.大家已经注意到了 ...

  • 字符数组清空

    大家好,今日我们继续讲解数组与字典解决方案,今日讲解的是第46讲:利用字典和数组,进行数据的模糊分类汇总.在VBA中,字典是引用的对象,那么我们可否能建立一个对象的数组呢?可以的.我们今日就来利用这个 ...

  • Excel多级下拉菜单制作大全,一二三级下拉菜单的制作!

    Excel多级下拉菜单制作大全,一二三级下拉菜单的制作!

  • 一级,二级,三级下拉菜单的制作方法

    设置下拉菜单的方式就是通过数据选项卡里的[数据验证](在2016版本里叫数据验证,在10版本及以下的版本里叫数据有效性). 01 一级下拉菜单 一级下拉菜单通常情况下制作有两种,一种是直接输入文本,另 ...

  • 一级,二级,三级下拉菜单的制作方法,给你整理全了

    最近小必老师在各位同学们的要求下,再次把各个级别的下拉菜单的制作方法给大家又重新整理了一遍,那么学不学就是不是老师的事了,就成了自己的. 设置下拉菜单的方式就是通过数据选项卡里的[数据验证](在201 ...

  • Excel三级下拉菜单的制作方法

    Excel三级下拉菜单?不知道怎么描述更易懂,还是先看演示: A列是一级下拉菜单,可以选择类别 B列是二级下拉菜单,根据A列的类别选对不同的品牌 C列为三级下拉菜单,它的内容是由A列和B列共同决定的, ...

  • 都有了,你要的Excel一级、二级、三级下拉菜单制作教程都有了!

    关于下拉菜单,粉丝经常会遇到相关问题,这次将Excel一级.二级.三级下拉菜单都说了. 1.一级 选择需要设置下拉菜单的区域,点数据,数据验证,选择序列,引用区域,确定,这样就搞定.现在就可以通过下拉 ...

  • 利用快捷键,3步制作自动更新的三级下拉菜单,小白也能轻松学会

    之前跟大家分享过多级下拉的制作方法,最近有粉丝反映,制作的下拉菜单新增数据无法实现自动更新,有新增的数据还需要再制作一次,有没有什么解决的方法?今天就跟大家分享一种解决的方法,操作也非常的简单,只需按 ...

  • 省、市、区三级下拉菜单,你会制作吗?原来这么简单!

    省、市、区三级下拉菜单,你会制作吗?原来这么简单!

  • 多级下拉菜单的制作

    大家好,经常从事管理方面的朋友会频繁碰到各种各样的信息输入,其中比较常见的一类就是分级信息.可能这样说的不太容易理解,我们看一个餐饮方面的小栗子,餐馆内部会将所有食物先分大类,然后再分小类,如下图所示 ...

  • 简单三步,轻松搞定一级、二级、三级下拉菜单

    下拉菜单示例 一级下拉菜单 一级下拉菜单的制作只需简单三步,使用"数据"选项卡的"数据验证"功能即可: 第一步:准备好下拉菜单源数据:把一级下拉菜单的所有省份放 ...