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

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

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

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

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

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

我要在一级菜单中实现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

代码截图:

代码讲解:

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

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) = "",此处大家要好好理解一下.

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

ComboBox1.List = mydic.keys

上述代码实现的是在ComboBox1中建立一级下拉菜单,是外层字典的键

6 ComboBox2.Clear

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

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

上述代码实现的是在ComboBox2中建立二级下拉菜单,是内层字典的键

下面看看代码的运行:

今日内容回向:

1 如何利用字典实现控件的下拉菜单?

2 对于字典的嵌套是否理解呢?

3 对于字典的特点是否掌握了?

绑定dictionary 给定关键字不再字典中_对字典嵌套的理解及二级下拉菜单的制作...相关推荐

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

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

  2. 绑定dictionary 给定关键字不再字典中_VBA代码集锦-利用字典做两列数据的对比并对齐...

    源数据: 代码: Sub 对比() Dim arr, brr, crr Dim i, j, n, lastrowA, lastrowB As Integer '建立字典对象 Set d = Creat ...

  3. wpf绑定 dictionary 给定关键字不再字典中_为什么要在 JavaScript 中学习函数式编程?...

    请忘掉你认为你知道的有关 JavaScript 的任何东西,以初学者心态来接触这份资料. 为帮助你这样做,我们打算从头开始复习 JavaScript 的基础知识, 就好像你以前从来没有看到过 Java ...

  4. php excel多级下拉菜单自动生成,Excel中任意多级下拉菜单的制作方法

    Excel下拉菜单,工作中经常会用到.一和二级下拉菜单有很多教程,比葫芦画瓢也能学会,但三级和三级以上的估计就没几个人能做出来了.本站小编无意间制作出一个下拉菜单模板,不仅1~4级可以设置,而且可以设 ...

  5. html中表格怎么实现下拉,wps表格中的二级下拉菜单怎么做

    excel二级联动下拉菜单怎么做 Excel怎么制作二级,三级甚至无限级下拉菜单 以WPS 2019版本为例: 关于Excel怎么制作二级,三级甚至无限级下拉菜单,在WPS「表格(Excel)」中操作 ...

  6. php实现二级下拉菜单,jquery,_用jquery实现二级下拉菜单,jquery - phpStudy

    用jquery实现二级下拉菜单 A B C D E F A B C D E F 这种下拉列表怎么做?当鼠标移动到li>a上,显示对应的div.而且鼠标能移动到div上,二级菜单不消失. 引用文字 ...

  7. 怎样在excel中利用有效性序列建立二级下拉菜单

    比如   在A列中选择部门名称,B列中的选择菜单自动会变成该部门下所有员工 问题补充: 问题一样.那答案呢? madm 的二级下拉菜单的公式如何运用..能否发文件上来 提问者: superaoyi - ...

  8. 手动制造报错_告别手动录入数据的错误,Excel多级下拉菜单怎么制作?

    知识改变命运,科技成就未来.Microsoft Excel数据录入是我们常会遇到的情况,尤其是对于固定数据的录入,每个人的习惯不同,录入的数据也会千差万别,对后期的数据统计造成不便,有什么办法能解决这 ...

  9. 关于Excel中,下拉菜单的制作。

    规定下拉菜单中的数据(Excel 2003 [数据]--- [有效性L] ). 在日文下,是[入力規則L] 第一步 1首先在Excel中,找一个位置,写出你的下拉菜单中,要使用的数据. 第二步 2然后 ...

最新文章

  1. generator (2)
  2. Python 代码混淆和加密技术
  3. linux系统在虚拟机中迁移的技术难点
  4. warnings (imported as 'THREE') was not found in 'three'
  5. [最新]制作u盘引导安装ubuntu11.04
  6. 如何通过map文件优化代码
  7. 长虹新一代人工智能电视Q6A、Q6K发布,搭载远场语音识别
  8. 开源HTML编辑器xhEditor用法详解
  9. mysql限制小数位_mysql-控制小数位数
  10. 在线社交网络分析 github,在线社交网络分析软件
  11. RFID Hacking③:使用ProxMark3嗅探银行闪付卡信息
  12. unsw计算机专业排名,2019上海软科世界一流学科排名计算机科学与工程专业排名新南威尔士大学排名第76-100...
  13. JVM性能调优(4)——性能调优工具
  14. 微信小程序之网易云音乐(三)- 主页面底部导航、轮播图、歌单及歌曲模块开发
  15. mono.dll caused an Access Violation (0xc0000005) in module mono.dll at 0033:e6b552d6.
  16. Flutter Bloc 官方文档(BlocBuilder翻译)
  17. 暑期学习与“懒人电商”项目经验总结
  18. android 连接蓝牙电子秤_Android实现串口通讯—连接有线电子秤
  19. python 91 32 默认参数
  20. mysql如何让自增的id从1开始

热门文章

  1. xalan_如何以10倍速加速Apache Xalan的XPath处理器
  2. update se_Java SE 7 Update 25 –发行说明进行了解释。
  3. Java接口–历年来Java 9之旅–默认和私有方法
  4. Picocli 2.0:类固醇上的Groovy脚本
  5. 用Java和Python模仿Kotlin构建器
  6. 使用Java 8 CompletableFuture和Rx-Java Observable
  7. Glass Fish 4.0.1中的Jersey SSE功能
  8. 深入了解Oracle IDM审核
  9. Java Enterprise软件与应有的内容
  10. EclipseLink MOXy和用于JSON处理的Java API –对象模型API