Excel省市区三级联动+启动宏事件控制一级下拉框清除子下拉框内容

话不多说,也是很久的技术了.铺天盖地的文章都有.

首先郑重声明!此篇文章的前半部分是转载过来的,不是那个老哥是否是原创,反正在我这就是转载的!

链接:https://blog.csdn.net/cb905259982/article/details/73521585

总结:这位老哥的文章,什么东西都有,但是有一点需要注意,就是下面这两个A:A和A:B了.demo文件中的函数是不带$符号的

对,也就是这个函数需要将A:A改为$A:$A,A:B改为$A:$B,这样你就可以再当前工作簿中任意地方,使用它的功能了

其实这个也是通过原文评论中调出来的方法.高手在民间啊~

Excel省市区三级联动+启动宏事件控制一级下拉框清除子下拉框内容

其实把原文老哥的文章看懂,然后修改的地方修改,在他给的demo中再写一个demo出来基本问题不大了.

第二部分

有了省市区三级联动,那么一旦修改了省的选项,市县内容按常理需要清空才行.这个小需求呢,其实也是花了我不少时间,主要是真的不会使用VB去写excel表格的宏函数.(我辛辛苦苦写完,老大直接说他以前玩过宏函数,这个需求简单,emmmmmmm,老大牛逼,老大牛逼)

OK.先上宏函数代码块吧

-------------------------------------------------------------------------------------------------------------------分割线

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Target.Row = 1 Then Exit Sub
For Each Rng In Target
If Rng.Column = 11 Then
Rng.Offset(0, 1).ClearContents
Rng.Offset(0, 2).ClearContents
End If
If Rng.Column = 12 Then 
Rng.Offset(0, 1).ClearContents
End If
If Rng.Column = 3 Then
Rng.Offset(0, 3).ClearContents
End If
Next
End Sub

-------------------------------------------------------------------------------------------------------------------分割线

注:题主技术有限,对于VB编写的宏函数理解有限,只能通过最通俗的方式进行讲解

Excel省市区三级联动+启动宏事件控制一级下拉框清除子下拉框内容

再上一张实例图是,便于大家理解及二次修改

Excel省市区三级联动+启动宏事件控制一级下拉框清除子下拉框内容

第五行的11就是我实例表中的一级下拉框对应的字母K,字母K在二十六位英文中是多少位?11位,所以这里就是修改成11.如果一级下拉框在字母C下面,那么宏函数第五行的数字改为3.以此类推,

其实5-8行是一个if判断,then相当于分隔符,前面是条件,成立则进入后半段函数,也就是第六行和第七行

这里使用的清除方法,主要还是Offset(x,y)中x,y的取值问题.x一般取值为0,也就是声明当前的下拉框自己,实在不懂?没关系,你可以数啊,你当前下拉框内容变化了,你要对后面的哪个下拉框内容进行清除?后面一个,y就是1,后面第二个,y就是2.省是0,市所在列距离省所在列相距1,那么第一个Offset(x,y)为Offset(0,1).

为什么还要一个Offset(x,y)?因为省变了,市和区县都要清空啊.所以又加了一个Offset(x,y),区县距离省距离2个格子,所以第二个Offset(x,y)为Offset(0,2)

注:一个Offset(x,y)只能修改一个下拉框,如果有N级下拉框,一级下拉框改变,如果想后面全部清空,则需要编写N-1个Offset(x,y)函数.

end if结束

第二个if循环其实也差不多.找到更改的下拉框所在字母的位数,需要清除的下拉框距离它自身有多远,总之,x必定为0,y就是数格子,要清除几个下拉框就写几个Offset(x,y)函数.记得使用end if结束循环.

有兴趣的同学可以数下L是不是第12位.

反正我是不数的..............