VBA公私模块要分清 多级联动效果全靠它点击上方“Excel和VBA”,选择“置顶公众号” 致力于原创分享Excel的相关知识,源码,源文件打包提供 一起学习,一起进步~~ 上节我们学习了多级联动来实现数据有效性的方法,因为会涉及到 一个两个知识点,一个是工作表的事件,另外一个就是字典,这两个我们之前的没有学习过,所以上一节我们只讲解了工作表的事件,而字典的部分,则放到今天来讲解。 所以今天我们接着上一节的内容 场景说明上一节我们学习了工作表事件的写法 这一节我们继续学习中间的内容,就是字典。 代码解析首先我们想来理解下,VBA中字典的概念 字典的概念,我们可以理解为我们在查字典, 比方说英汉字典 一个英文单词,对照多个解释 但一个字典只会针对一个内容出现一次解释,不会出现两次,这是字典的唯一性,这是字典的键 一个内容,比方说单词,有很多种解释,这就是字典的值,可以有很多过,也可以是重复的 比方说下面的案例 chicken,就是字典的键 他对应的解释,鸡肉,胆怯等,都是字典的值。 现在有了这个键-值的概念之后就可以继续往下走了。 为什么要在这里使用字典呢? 从上面的图中可以看到,我国现在只有34个省级行政区+直辖市,但是这份数据表中,起码有上万行,因为一个省级行政单位下面,还有很多个市区,一个市级单位,下面还有很多个区县,所以这份数据中重复数据非常的多 但是我们的数据有效性,肯定是只有一个,那么就是就是要从上面的这份重复数据中,获取唯一值,那么如何获取呢? 我们上面说了,字典的键有唯一性,所以这里要使用字典。 我们取其中一个字段,就是省来进行讲解 如何获取省级单位的唯一值 For Each rng In Sheets("省市县名单").Range("b3:b" & row1) 遍历第一列数据,将所有的数据都装入字典中 但是比方说北京有好几个,如果都装进去是不是错了呢? 没错,但是你不可能都装进去,因为字典的唯一性,你只能装进去一个,如果还继续装进去第二个相同数据,就会报错,那么为什么案例的代码还可以继续执行呢? 关键代码在最上面这句代码,有报错,则忽略报错,继续往下执行,这样一个循环过程之后,我们就有了一个省级单位的字典了 总共34个,一个都没有少 那么这个时候,既然已经有了省级单位的数据了,就可以直接放到有效性里面去了,将单元格的有效性,设置为我们的这个字典 With Target.Validation .Delete 有了之前的代码基础之后,这里就很好理解了,直接套用即可。 然后我们继续往下走,来到市级单位 这时候,我们已经在第一列选择了省级单位了。 还是利用数据表的关系,便利循环第一列数据,找出省所对应的所有市,装入数组中,这样一个过程就完成了,就相同的方式得到了市的字典了。 同理,也可以用在县区的操作中 今天的讲解就全部讲解完了,可能大家理解起来还是比较的难理解,还需要下面细细的品味,多调试,多查看结果,才可以理解。 |
|