Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Excel实战技巧68:创建级联列表框(使用ADO技巧)

Excel实战技巧68:创建级联列表框(使用ADO技巧)

作者头像
fanjy
发布于 2019-12-24 08:30:58
发布于 2019-12-24 08:30:58
1.4K00
代码可运行
举报
文章被收录于专栏:完美Excel完美Excel
运行总次数:0
代码可运行

在《Excel实战技巧67:在组合框中添加不重复值(使用ADO技巧)》中,我们使用记录集技巧给组合框添加了不重复值,并概要讲述了ADO记录集基础知识。本文利用记录集技巧,创建级联列表框。

示例效果如下图1所示。

图1

正如上图1所演示的,创建的一组列表框-Region,Market和State可以联动工作。也就是说,如果选择列表框Region中的某项,那么列表框Market和State仅显示在所选择的Region项中与该项关联的值。同样,选择列表框Market中的某项,列表框State中仅显示与Market项中与该项关联的值。

解决方法

使用ADO记录集为子列表框提取记录,使用父列表框的值作为条件。在这种情况下,Region和Markets都是父列表框,因为它们影响如何提供下一级的值。Market和State作为子列表框,因为它们的值取决于其上一级列表框。

在本示例中,创建一个函数,接受子列表框作为其参数,然后使用该列表框判断提取什么数据以及填充哪个列表框。

打开VBE,插入一个标准模块,输入下列代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Function CascadeChild(TargetChild As OLEObject)
    Dim Myconnection As Connection
    Dim Myrecordset As Recordset
    Dim Myworkbook As String
    Dim strSQL As String
    Set Myconnection = NewConnection
    Set Myrecordset = NewRecordset
   
    '识别要引用的工作簿
    Myworkbook =Application.ThisWorkbook.FullName
   
    '打开对该工作簿的连接
    Myconnection.Open"Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source="& Myworkbook & ";" & _
    "ExtendedProperties=Excel 8.0;" & _
    "Persist SecurityInfo=False"
   
    '确定正确的SQL语句,在父列表框中使用该值作为查询的参数
    Select CaseTargetChild.Name
    Case Is ="lstMarket"
        strSQL = "SelectDistinct [Market] AS [tgtField] from [Sheet1$A1:C40] Where [Region]='"& Sheet1.lstRegion.Value & "'"
    Case Is ="lstState"
        strSQL = "SelectDistinct [State] AS [tgtField] from [Sheet1$A1:C40] Where [Market]='"& Sheet1.lstMarket.Value & "'"
    End Select
   
    '装载查询到记录集中
    Myrecordset.Open strSQL,Myconnection, adOpenStatic
    '填充目标子列表框
    With TargetChild.Object
        .Clear
        Do
            .AddItemMyrecordset![tgtField]
           Myrecordset.MoveNext
        Loop UntilMyrecordset.EOF
'自动选择列表框中的第一个值
        .Value = .List(0)
    End With
   
    '清理
    Myconnection.Close
    Set Myrecordset = Nothing
    Set Myconnection =Nothing
   
End Function

每个父列表框的OnClick事件只是简单地调用上面的函数,传递目标子列表框作为函数的参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Private Sub lstMarket_Click()
    CallCascadeChild(ActiveSheet.OLEObjects(Sheet1.lstState.Name))
End Sub
 
Private Sub lstRegion_Click()
    Call CascadeChild(ActiveSheet.OLEObjects(Sheet1.lstMarket.Name))
End Sub

说明

1.示例中使用的是ActiveX列表框控件。

2.需要在VBE中设置对Microsoft ActiveX Data Objects Library的引用,如下图2所示。

图2

3.可以使用如下所示的命名区域代替硬编码单元格区域:

Myrecordset.Open “Select Distinct [Market] from [命名区域]”

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Excel实战技巧67:在组合框中添加不重复值(使用ADO技巧)
很多情况下,我们需要使用工作表中的数据来填充组合框,但往往这些数据中含有许多重复值。如何去除重复值并得到唯一值,这是一个永恒的话题,大家也会用到各式各样的方法得到结果。本文讲解一种技巧,使用Recordset(记录集)来获取唯一值并将其填充到组合框中。
fanjy
2019/12/24
5.9K0
Excel实战技巧72:又一个创建级联列表框的示例
在《Excel实战技巧68:创建级联列表框(使用ADO技术)》中,我们使用ADO技术将列表框中的项目关联起来,实现了级联列表框。
fanjy
2020/01/14
8360
Excel实战技巧72:又一个创建级联列表框的示例
Excel实战技巧98:使用VBA在工作表中添加ActiveX控件
要使用VBA从控件工具箱(ActiveX控件)中添加控件,可以使用OLEObjects集合的Add方法。该方法包含有大量的参数,包括ClassType、Top、Left、Width和Height等参数。
fanjy
2021/03/12
6K0
Excel实战技巧78: 创建个人宏工作簿
个人宏工作簿是一个文件,可以在应用程序开启时运行其中的VBA代码,就像是运行功能区选项卡中的命令一样。创建个人宏工作簿很简单,如下所示。
fanjy
2020/05/25
3.3K0
Excel实战技巧78: 创建个人宏工作簿
Excel实战技巧63: 制作具有数据导航功能的用户窗体
本文讲述如何连接用户窗体与ADO记录集,最终创建一个与Access窗体相似的用户窗体,可以导航至前一条记录、下一条记录、第一条记录、最后一条记录,等等。
fanjy
2019/12/04
3.2K0
VBA实战技巧25:巧用文本框和列表框
如下图1所示,在用户窗体界面上实际放置着一个文本框和一个列表框,当单击文本框右侧的下拉按钮时,会出现一个列表框,你可以从中选择数据项并将其输入到文本框中。
fanjy
2021/07/12
1.8K0
VBA实战技巧25:巧用文本框和列表框
Excel实战技巧74: 在工作表中创建搜索框来查找数据
如下图1所示,在数据区域上方放置有一个文本框,用来输入要搜索的文本,其名称重命名为“MySearch”;一个用作按钮的矩形形状,点击它开始搜索并显示结果;两个选项按钮窗体控件,用来选择在数据区域的哪列进行搜索。
fanjy
2020/02/18
17.2K1
VBA进阶:SortedList详解之基础
在VBA中,有一些用于存储数据的对象,例如字典、集合、数组、ActiveX组合框、ActiveX列表框、用户窗体组合框、用户窗体列表框、ArrayList等,SortedList也是其中的一种,它是一个集合对象,可用于存储任意类型的数据,包括数字、字符串、日期、数组、单元格区域、变量和对象。
fanjy
2019/12/24
3.8K0
Excel VBA编程
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
全栈程序员站长
2022/08/11
46.4K0
Excel VBA编程
Excel实战技巧66:创建向导样式的数据输入窗体4
在HRWizard用户窗体中输入的一些数据是通过组合框控件显示给用户的。HRWizard工作簿文件包含一个名为ListMgr的工作表,其中包含每个列表的数据,这些数据存储在ListMgr工作表的命名区域。
fanjy
2019/12/10
1.3K0
Excel实战技巧66:创建向导样式的数据输入窗体4
ExcelVBA-ADO-SQL-001连接数据库
Excel 2003 Excel 2007 Excel 2010 Excel 2013
哆哆Excel
2022/10/25
2.1K0
ExcelVBA-ADO-SQL-001连接数据库
Excel实战技巧66:创建向导样式的数据输入窗体5
到目前为止,我们已经完成了最艰难的工作。接下来,我们来编写用户窗体代码,将已完成的对象放进HRWizard用户窗体里并使这些对象工作。
fanjy
2019/12/11
1.8K0
Excel实战技巧66:创建向导样式的数据输入窗体5
Excel实战技巧77: 实现在当前工作表和前一个使用的工作表之间自由切换
Windows有一个另人喜爱的快捷键Alt+Tab,可以在当前应用程序和前一个使用的应用程序之间来回切换。Excel也有两个快捷键:Ctrl+PageUP和Ctrl+PageDown,可以在工作表之间导航,它们是按顺序依次切换工作表,这样,如果要从工作表Sheet1切换到工作表Sheet5,要按快捷键4次。thespreadsheetguru.com分享了使用代码创建的快捷键(Alt+`),可以在当前工作表和前一个使用的工作表之间切换。
fanjy
2020/05/14
1.3K0
基础扩展 | 11. 使用ADO和SQL在Excel工作表中执行查询操作
我们可以将存储数据的工作表当作数据库,使用ADO技术,结合SQL查询语句,可以在工作表中获取满足指定条件的数据。
fanjy
2019/07/19
5K0
VBA实战技巧33:动态用户窗体图像显示
本文所展示的技巧主要是根据工作表中的数据,在用户窗体的组合框中选择项目后,显示该项目的说明和相应的图像。用户窗体的大小会根据图像的大小进行调节,如下图1所示。
fanjy
2021/09/22
3.1K0
Excel实战技巧43: 将多个PDF文件中指定页面合并成一个PDF文件
在《Python实战01:合并多个PDF文件》和《Python实战02:分别合并多个相似文件名的PDF文件》中,我们使用Python代码对PDF文件进行操作来合并PDF文件。其实,使用VBA也能合并PDF文件。
fanjy
2019/07/19
6.7K2
Excel实战技巧43: 将多个PDF文件中指定页面合并成一个PDF文件
Vba菜鸟教程[通俗易懂]
官方文档:https://docs.microsoft.com/zh-cn/office/vba/api/overview/language-reference 代码完成后:工具-vbaproject属性-保护-查看时锁定-密码
全栈程序员站长
2022/09/05
17.6K0
Vba菜鸟教程[通俗易懂]
VBA实战技巧20:选取不同工作表中不同单元格区域时禁止用户执行复制剪切粘贴操作
在《VBA实战技巧19:根据用户在工作表中的选择来隐藏/显示功能区中的剪贴板组》中,我们讲解了根据用户在工作表中的选择来决定隐藏或者显示功能区选项卡中的特定组的技术。在这里就要派上用场了。
fanjy
2021/03/12
2.4K0
Power Query 系列 (20) - 如何在外部使用Power Query提供的服务
Power Query 作为桌面端数据清理和转换的工具,能极大解放生产力,将繁琐的数据处理工作从重复的劳动中解放出来。那么,Power Query 能否对外提供计算服务呢?或者说 Power Query 有没有对外提供的编程接口? 根据我的探索,似乎没有,但在网络上找到下面的两种 walkaround 方式,都比较小众。所以如果真的需要数据处理、数据分析服务的话,不如选择其他的方案,比如 pandas 等等,拥有更大的自由度。
StoneWM
2021/03/25
2.6K0
VBA实战技巧:快速返回最后一次编辑的单元格
在有些情况下,我们可能需要快速返回到最后一次编辑的单元格。例如,最后一次编辑的单元格是单元格K112,然而我的当前单元格在单元格C1,如何定位这个最后编辑的单元格并快速返回到该单元格呢?
fanjy
2022/11/16
9970
VBA实战技巧:快速返回最后一次编辑的单元格
推荐阅读
相关推荐
Excel实战技巧67:在组合框中添加不重复值(使用ADO技巧)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验