精华内容
下载资源
问答
  • 大家好,今日我们继续讲解VBA数组...今日我就给大家讲解一下,其实这和二级菜单的制作是类似的,但是需要读者充分理解字典嵌套的含义,也就是说ITEM值可以是字典,要充分理解这时字典的意义,在大脑中模拟这个过程。...

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

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

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

    14736bf078ec4a12350c8263d41ee938.png

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

    a469f6f0c5891aec9694485ae7c2c402.png

    下面看我给出的代码:

    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

    代码截图:

    a366aff4275d1efdb29edb0d77edcaa8.png

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

    上述代码给三级菜单赋值

    代码的运行:

    4dea2dd477a8fed4cbd4d486dee5e90b.png
    c633de0ea966a610ef28e3c25f99e927.png

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

    今日内容回向:

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

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

    #2019生机大会#

    展开全文
  • 文章背景:在使用VBA的用户窗体(userform)时,有时会用到二级下拉菜单。比如选择院系(一级下拉菜单)后,班级(二级下拉菜单)的内容自动更新;选择省份后,该省份下面所属的市相应更新。接下来以省市为例,进行二级...

    文章背景:在使用VBA的用户窗体(userform)时,有时会用到二级下拉菜单。比如选择院系(一级下拉菜单)后,班级(二级下拉菜单)的内容自动更新;选择省份后,该省份下面所属的市相应更新。接下来以省市为例,进行二级下拉菜单的功能实现。

    表1的数据如下:

    21be96eb0a44a5ba1e3cbfd254c92057.png

    用户窗体的内容如下:

    4aac874ac1c9b2cc2ea2153d1c479884.png

    省份combox的名称取为provinceselect;城市combox的名称取为cityceselect

    用户窗体内的VBA代码如下:

    Option ExplicitPrivate Sub provinceselect_Change()        'Populate city data        Dim i As Integer, j As Integer, nrow As Integer        Sheets("Sheet1").Select        'Clear old data, if exists    UserForm1.cityselect.Clear        nrow = Range("A65535").End(xlUp).Row        For i = 1 To nrow            j = 1                If Range("A1:A" & nrow).Cells(i, 1) = UserForm1.provinceselect.Text Then                    Range("A" & i).Select                    Do While Not IsEmpty(ActiveCell.Offset(j, 0))                            UserForm1.cityselect.AddItem ActiveCell.Offset(j, 0)                                j = j + 1                            Loop                    UserForm1.cityselect.Text = ActiveCell.Offset(1, 0)                    Exit For                    End If            Next i    End SubPrivate Sub UserForm_Initialize()    'Populate Provinces        Dim ncategories As Integer, i As Integer        Sheets("Sheet1").Select        ncategories = WorksheetFunction.CountA(Columns("C:C"))        For i = 1 To ncategories            UserForm1.provinceselect.AddItem Range("C1:C" & ncategories).Cells(i, 1)            Next i        UserForm1.provinceselect.Text = Range("C1").Value    End Sub

    窗体初始化时,将省份的数据填入;当省份的选项发生变化时,城市的信息也做相应的修改。

    代码运行过程如下:

    参考资料:

    [1] Coursera课程(Excel/VBA for Creative Problem Solving, Part 3)

    展开全文
  • EXCEL编程VBA高级教程

    2015-04-16 11:40:55
    一、VBA语言基础...................................................................................................................1 第一节标识符...........................................................
  • 第16章介绍了使用VB开发AutoCAD的一些知识(将VBA代码转换到VB中,VB窗体和AutoCAD的焦点切换,使用ActiveXDLL封装带有窗体的VB程序)、搜索某个文件夹中所有的文件和VBAIDE的编程,利用这些知识,完全有可能开发出...
  • VBA常用技巧

    2014-12-21 16:39:28
    技巧115 二级组合框 12 技巧116 使用DTP控件输入日期 12 技巧117 使用RefEdit控件选择区域 12 技巧118 如何注册控件 12 技巧119 遍历控件的方法 12 119-1 使用名称中的变量遍历控件 12 119-2 使用对象类型遍历控件 ...
  • VBA编程技巧大全

    2013-08-05 09:03:19
    技巧115 二级组合框 270 技巧116 使用DTP控件输入日期 272 技巧117 使用RefEdit控件选择区域 275 技巧118 如何注册控件 276 技巧119 遍历控件的方法 279 119-1 使用名称中的变量遍历控件 279 119-2 使用对象类型遍历...
  • Excel VBA实用技巧大全 附书源码

    热门讨论 2010-10-08 18:59:24
    01064获取Excel窗体工具栏信息 01065获取Excel外部数据工具栏信息 01066获取Excel公式审核工具栏信息 01067获取Excel控件工具箱工具栏信息 01068获取Excel绘图工具栏信息 01069获取Excel命令按钮的外观图像和FaceID...
  • 10.8.1 检查选项组菜单窗体的组成 297 10.8.2 ManipulatingControlsExample窗体 298 10.8.3 查看窗体后面的代码 299 10.9 小 结 304 第11章 创建强大的报表 305 11.1 对汇总、细节以及综合这二者的报表...
  • 10.8.1 检查选项组菜单窗体的组成 297 10.8.2 ManipulatingControlsExample窗体 298 10.8.3 查看窗体后面的代码 299 10.9 小 结 304 第11章 创建强大的报表 305 11.1 对汇总、细节以及综合这二者的报表建立同一...
  • 本书分为12章,涵盖了使用Access 2003来设计数据库系统的相关概念与技巧,通过实例让读者轻松学会表、查询、窗体、数据访问页的制作,更有宏、控件、VBA等高级应用知识等待你去探索。 本书理论与实践相结合,解说...
  • 本书分为12章,涵盖了使用Access 2003来设计数据库系统的相关概念与技巧,通过实例让读者轻松学会表、查询、窗体、数据访问页的制作,更有宏、控件、VBA等高级应用知识等待你去探索。 本书理论与实践相结合,解说...
  • 本书分为12章,涵盖了使用Access 2003来设计数据库系统的相关概念与技巧,通过实例让读者轻松学会表、查询、窗体、数据访问页的制作,更有宏、控件、VBA等高级应用知识等待你去探索。 本书理论与实践相结合,解说...
  • 本书分为12章,涵盖了使用Access 2003来设计数据库系统的相关概念与技巧,通过实例让读者轻松学会表、查询、窗体、数据访问页的制作,更有宏、控件、VBA等高级应用知识等待你去探索。 本书理论与实践相结合,解说...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...
  • 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化...

空空如也

空空如也

1 2 3
收藏数 54
精华内容 21
关键字:

vba窗体二级菜单