我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!
关于制作下拉菜单的方法,我以前也写过,
比如用公式制作下拉菜单的方法:
《Excel中下拉菜单制作的方法》
再比如用ActiveX控件制作下拉菜单的方法:
《利用ActiveX之组合框做二级下拉菜单!》
还有输入关键字可以模糊匹配的下拉菜单:
《这才是你最需要的下拉菜单!》
因为最近一直在写字典方面的文章,所以今天分享一个用字典+事件+数组做的三级下拉菜单。
先来看下效果:
1、只有在第二行以后的所有行与A、B、C三列的交集区域点击单元格时才会弹出下拉选项,点击其他区域的单元格都不会弹出下拉选项。
2、当选择省份后,市的选项会根据已选择的省份自动匹配,当选择市后,区县的选项会也会自动根据市的选项来匹配。
似乎并没什么新鲜?且看下面!
1、当省份、市、区县对应的单元格已经有了数据了,这时如果修改省份对应的单元格的数据,市、区县单元中的数据均会自动清空,等待选择正确的结果。
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感兴趣
手机端请扫描
电脑端请登录
www.mihong.top
找到《带你走进VBA的世界》
跟着我一步步学习VBA
您点的每个赞,我都认真当成了喜欢