Excel VBA窗体组合框ComboBox多级下拉联动终极解决方案 无限级别逐级加载 类模块通用组件

2021年10月13日12:53:23Excel VBA窗体组合框ComboBox多级下拉联动终极解决方案 无限级别逐级加载 类模块通用组件已关闭评论 4,709 views
微信公众号 【EXCEL880】
说出需求一键生成VBA代码 VBA中文编程助手VBAYYDS.COM

一直以来,对于学习ExcelVBA的同学,窗体下拉列表多级联动都是个难题,我在教程里也讲了2级和3级联动的一般实现方法,但是对于初学者或者中级水平以下的同学来说还是难度偏大,难以自己灵活应用,特别是当一个窗体有多组多级列表的时候,简直就是噩梦,当然当出现5级联动,6级联动乃至更多级别的时候,基本就是地狱级别的难度,鉴于此,我特别开发了本模块,VBA窗体多级下拉通用组件,实现了多级下拉无限级别通用,单个窗体中多组不同列表可分别使用,调用 简单,即使是刚入么的新手也能学会使用,本组件主要功能如下

视频说明: https://www.bilibili.com/video/BV1FL411G7kP/

  • 轻松实现2级下拉联动,3级下拉联动,4级下拉联动,5级下拉联动,6级下拉联动,实际是无限级别
  • 高度组件化实现,用户无需关心细节,导入类模块后,只需几行代码调用即可实现下拉联动
  • 单个窗体和多个窗体里单组级联菜单,以及多组级联菜单可任意多组同时使用,互不干扰
  • 高级逐级加载算法,4万行4级省市区县数据1秒加载完成,下拉选择切换无卡顿丝般顺滑
  • 最新版兼容Listbox 可混合使用

购买说明

  1. 打开你需要使用多级列表的案例,准备好窗体及数据,窗体中画好准备应用多级列表的组合框,组合框命名无要求,可自行决定
  2. 打开我的演示案例,找到2个类模块clsMLevelCombox和clsNode880,在左侧工程管理器中,鼠标选中类模块不动,拖动到你的目标工程即可
  3. 然后在目标窗体中,添加以下代码
    Dim WithEvents 级联菜单1 As clsMLevelCombox
    Sub 级联菜单初始化()
        Set 级联菜单1 = New clsMLevelCombox
        级联菜单1.Init [省市区!A2:C2841], ComboBox1, ComboBox2, ComboBox3
        ''级联菜单1.Init 级联列表数据源, 1级组合框,2级组合框,3级组合框....
    End Sub
    
    Private Sub UserForm_Initialize()
        级联菜单初始化
    End Sub
    
    Private Sub 级联菜单1_Changed(NodePath As Variant, Row As Variant) '点击切换数据事件
      MsgBox NodePath & ": 原数据行号是" & Row
    End Sub
    
  4. 实际工程中,根据需要在 级联菜单1.Init 参数中,改变参数即可, 更多级数列表框,只需要后面依次增加组合框控件参数即可
  5. 多组同时启用的写法 直接参考组件案例即可
    Dim WithEvents 级联菜单1 As clsMLevelCombox
    Dim WithEvents 级联菜单2 As clsMLevelCombox
    Sub 级联菜单初始化()
        Set 级联菜单1 = New clsMLevelCombox
        级联菜单1.Init [数据!B2:G143], ComboBox1, ComboBox2, ComboBox3, _
                              ComboBox4, ComboBox5, ComboBox6
         Set 级联菜单2 = New clsMLevelCombox
        级联菜单2.Init [行政区!A2:D46195], ComboBox7, ComboBox8, _
                              ComboBox9, ComboBox10
    End Sub
    
    Private Sub 级联菜单1_Changed(NodePath As Variant, Row As Variant)
        Label13.Caption = NodePath & ": 原数据行号是" & Row
    End Sub
    Private Sub 级联菜单2_Changed(NodePath As Variant, Row As Variant)
       Label13.Caption = NodePath & ": 原数据行号是" & Row
    End Sub
    '//// 以上是标准示范代码
    Private Sub UserForm_Initialize()
        级联菜单初始化
    End Sub
说出需求一键生成VBA代码 VBA中文编程助手VBAYYDS.COM