ueditor添加下拉事件_Excel中最智能的三级下拉菜单!

本文介绍了如何使用VBA结合工作表事件和字典技术,创建一个智能的三级联动下拉菜单。在Excel中,当选择省份时,市和区县的选项会自动匹配,并在数据更改时自动清空不匹配的选项,提供了一个提升办公效率的实用技巧。通过学习此案例,读者可以掌握VBA的基础知识和应用。
摘要由CSDN通过智能技术生成

我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!

关于制作下拉菜单的方法,我以前也写过,

比如用公式制作下拉菜单的方法:

《Excel中下拉菜单制作的方法》

再比如用ActiveX控件制作下拉菜单的方法:

《利用ActiveX之组合框做二级下拉菜单!》

还有输入关键字可以模糊匹配的下拉菜单:

《这才是你最需要的下拉菜单!》

因为最近一直在写字典方面的文章,所以今天分享一个用字典+事件+数组做的三级下拉菜单。

先来看下效果:

cbe655adf55b3f0f38b56d3c8a9b9b4f.gif

1、只有在第二行以后的所有行与A、B、C三列的交集区域点击单元格时才会弹出下拉选项,点击其他区域的单元格都不会弹出下拉选项。

2、当选择省份后,市的选项会根据已选择的省份自动匹配,当选择市后,区县的选项会也会自动根据市的选项来匹配。

似乎并没什么新鲜?且看下面!

6ba06924f8d03bcffd6a966b4362ef71.gif

1、当省份、市、区县对应的单元格已经有了数据了,这时如果修改省份对应的单元格的数据,市、区县单元中的数据均会自动清空,等待选择正确的结果。

1af93445a130cef8ef48296f31212e72.gif

1、同理,当市对应的单元格中的数据修改后,区县里的数据自动清空等待重新选择正确的结果。

是不是挺智能的呢?

虽然是利用事件+字典+数组做的,但大家别感觉很复杂,只要能把VBA部分的一些基础知识掌握了,做这个就一点都不难,况且学习VBA,这三个方面的知识是必须要了解的,所以这是一个练习VBA基本功的绝好案例。

下面分享下代码:

因为要修改省份单元格中的数据时市、区县单元格的数据会自动清空,所以要用到工作表的Change事件。

代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)    If Target.Column = 1 Then Target(1, 2).Resize(1, 2).ClearContents    If Target.Column = 2 Then Target(1, 2).ClearContentsEnd Sub

向右滑动可以查看完整代码

当选中A、B、C列的单元格时,希望能出现下拉菜单,所以要用到工作表的SelectionChange事件

代码如下:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)    If Target.Column > 3 Or Target.Row = 1 Then Exit Sub    Dim d As Object, i%, mystr$, arr    On Error Resume Next    Set sjy = Sheets("数据源")    Set d = CreateObject("scripting.dictionary")    With d        arr = sjy.Range("a2").Resize(sjy.UsedRange.Rows.Count - 1, 3)                Select Case Target.Column                    Case 1                For i = 1 To UBound(arr)                    d(arr(i, 1)) = ""                Next                mystr = Join(.keys, ",")                With Target.Validation                    .Delete                    .Add xlValidateList, xlValidAlertStop, , mystr                End With                            Case 2                For i = 1 To UBound(arr)                    If Target(1, 0) = arr(i, 1) Then                        d(arr(i, 2)) = ""                    End If                Next                mystr = Join(.keys, ",")                With Target.Validation                    .Delete                    .Add xlValidateList, xlValidAlertStop, , mystr                End With                    Case 3                For i = 1 To UBound(arr)                    If Target(1, -1) = arr(i, 1) And Target(1, 0) = arr(i, 2) Then                        d(arr(i, 3)) = ""                    End If                Next                mystr = Join(.keys, ",")                With Target.Validation                    .Delete                    .Add xlValidateList, xlValidAlertStop, , mystr                End With                End Select    .RemoveAll    End WithEnd Sub

向右滑动可以查看完整代码

出现下拉选项的思路是:根据被选中的单元格列号判断其数据验证列表的来源,利用字典去重复的原理把相关的选项写入字典,然后输出给该验证序列。

本案例的关键技术:

1、工作表事件:Change事件

2、工作表事件:SelectionChange事件

3、字典去重复的特性

4、把数据读取到字典里的技巧

5、数组的应用

6、Join函数的用法

6、给单元格添加数据验证

本节的分享就到这里,鹏哥祝大家每天都有进步。

聚米为谷

博学宏才

如果对VBA感兴趣

手机端请扫描

ed2606c9cf2eda267f9b6a00f895811f.png

电脑端请登录

www.mihong.top

找到《带你走进VBA的世界》

跟着我一步步学习VBA

a5cb1e9199fe7c2c461f64d13baa29b9.gif 您点的每个赞,我都认真当成了喜欢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值