ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1380|回复: 9

[分享] “1个类模块+1个字典”实现N级联动

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-10-18 17:11 | 显示全部楼层 |阅读模式
确保“联动基础数据列数=ComboBox控件个数”即可正常实现N级联动

“类模块、字典”的相关知识均是我在这个论坛的各位版主和各位大神的教学帖中学到的,受益匪浅,在此多谢各位老师了!现把学习到的“类模块+字典”做了一个N级联动,实验成功,欣喜之余,把这个简单的程序分享给后来需要了解这方面知识的朋友们。。高手直接跳过吧,毕竟我只是学了点儿皮毛,程序比较粗糙,呵呵



主程序:
  1. Dim cbarr() As New cbc

  2. Private Sub UserForm_Initialize()
  3.     Set zd = CreateObject("scripting.dictionary")
  4.     sjarr = Cells(1, 1).CurrentRegion
  5.     For i = 1 To UBound(sjarr)
  6.     s = ""
  7.     For j = 1 To UBound(sjarr, 2)
  8.         s = s & sjarr(i, j) & "-"
  9.         zd(Left(s, Len(s) - 1)) = ""    '
  10.     Next j
  11.     Next i
  12.     For Each zds In zd.keys
  13.      If UBound(Split(zds, "-")) = 0 Then
  14.          Me.ComboBox1.AddItem zds
  15.     End If
  16.     Next
  17.     ReDim cbarr(1 To UBound(sjarr, 2))
  18.     For i = 1 To UBound(sjarr, 2) - 1
  19.     cbarr(i).st Me.Controls("ComboBox" & i), zd.keys, i
  20.     Next i
  21.     Set zd = Nothing
  22. End Sub
复制代码

类模块:
  1. Private WithEvents cb As ComboBox, n, zds

  2. Public Sub st(cbs, zdkeys, cbn)
  3.     Set cb = cbs
  4.     n = cbn
  5.     zds = zdkeys
  6. End Sub

  7. Private Sub cb_Change()
  8.     With UserForm1
  9.     .Controls("ComboBox" & n + 1).Clear
  10.     For i = 0 To UBound(zds)
  11.         If UBound(Split(zds(i), "-")) = n Then
  12.             s1 = ""
  13.             s2 = ""
  14.             For j = 0 To n - 1
  15.                 s1 = s1 & Split(zds(i), "-")(j) & "-"
  16.                 s2 = s2 & .Controls("ComboBox" & j + 1) & "-"
  17.            Next j
  18.            If s1 = s2 Then
  19.                .Controls("ComboBox" & n + 1).AddItem Split(zds(i), "-")(n)
  20.            End If
  21.        End If
  22.     Next i
复制代码


评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-10-18 20:24 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-19 08:44 | 显示全部楼层
图片好像没显示出来?而且附件也忘放上去了,这里补一下。。 QQ截图20181018170618.jpg

如要增加或减少联动级数,相应增加或减少ComboBox控件即可

test1.rar

24.12 KB, 下载次数: 123

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-19 08:48 | 显示全部楼层

多谢朋友捧场。。之前发帖都是问问题,这是第一次发分享帖。。呵呵

TA的精华主题

TA的得分主题

发表于 2018-10-20 08:35 | 显示全部楼层
venomlk 发表于 2018-10-19 08:48
多谢朋友捧场。。之前发帖都是问问题,这是第一次发分享帖。。呵呵

谢谢  分享

TA的精华主题

TA的得分主题

发表于 2018-10-20 09:00 | 显示全部楼层
venomlk 发表于 2018-10-19 08:44
图片好像没显示出来?而且附件也忘放上去了,这里补一下。。

如要增加或减少联动级数,相应增加或减少Co ...

能否多来个示例?
如果是工作表中,数据有效性下拉框能否实现?
谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-20 16:52 | 显示全部楼层
yunfei2018 发表于 2018-10-20 09:00
能否多来个示例?
如果是工作表中,数据有效性下拉框能否实现?
谢谢!

工作表中可以用“Worksheet_Change”事件来实现,可在论坛中搜索相关帖子

TA的精华主题

TA的得分主题

发表于 2018-10-21 15:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼主这个多级联动的思路很独特、有创意,代码简洁、清晰,很好!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-22 10:35 | 显示全部楼层
三坛老窖 发表于 2018-10-21 15:20
楼主这个多级联动的思路很独特、有创意,代码简洁、清晰,很好!

哈哈,想不到大神级别的高手来捧场了,多谢老师的好评。。呵呵

TA的精华主题

TA的得分主题

发表于 2018-10-22 19:49 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 23:55 , Processed in 0.046626 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表