如何为Excel ComboBox实现基于Line选择的联动筛选功能?
实现ComboBox联动筛选(基于Select Case)
1. 初始化ComboBox(优化原有逻辑)
先完成产线ComboBox的初始化,机器ComboBox先加载空选项,等待产线选择后再联动更新:
Sub Refresh_DropDown_List() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("List") Dim lastRow As Long, i As Integer ' 初始化产线ComboBox(去重) Me.cmb_line.Clear Me.cmb_line.AddItem "" lastRow = sh.Cells(sh.Rows.Count, "D").End(xlUp).Row For i = 2 To lastRow If Not IsInComboBox(Me.cmb_line, sh.Range("D" & i).Value) Then Me.cmb_line.AddItem sh.Range("D" & i).Value End If Next i ' 初始化机器ComboBox为空 Me.cmb_machine.Clear Me.cmb_machine.AddItem "" End Sub ' 辅助函数:检查值是否已在ComboBox中,避免重复选项 Function IsInComboBox(cbo As ComboBox, val As String) As Boolean Dim i As Integer For i = 0 To cbo.ListCount - 1 If cbo.List(i) = val Then IsInComboBox = True Exit Function End If Next i IsInComboBox = False End Function
2. 添加产线ComboBox的Change事件
通过Select Case判断选中的产线,加载对应范围的机器选项:
Private Sub cmb_line_Change() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("List") Dim startRow As Long, endRow As Long, i As Integer ' 清空机器ComboBox,保留空选项 Me.cmb_machine.Clear Me.cmb_machine.AddItem "" ' 根据选中产线匹配对应机器范围 Select Case Me.cmb_line.Value Case "L1" startRow = 2 endRow = 28 Case "L2" ' 示例:根据实际需求添加其他产线规则 startRow = 29 endRow = 50 Case "L3" startRow = 51 endRow = 75 ' 可继续添加更多产线的Case分支 Case Else ' 选空或未定义产线时,加载所有机器(可选逻辑) startRow = 2 endRow = sh.Cells(sh.Rows.Count, "C").End(xlUp).Row End Select ' 加载对应范围的机器(去重) For i = startRow To endRow If sh.Range("C" & i).Value <> "" And Not IsInComboBox(Me.cmb_machine, sh.Range("C" & i).Value) Then Me.cmb_machine.AddItem sh.Range("C" & i).Value End If Next i End Sub
关键说明
- 请根据实际产线对应的机器行范围,修改
Select Case中的startRow和endRow数值。 - 辅助函数
IsInComboBox用于避免ComboBox出现重复选项,保持列表整洁。 - 仅读取List工作表数据,不会修改表结构或破坏关联的图表、SUMIF公式。
内容的提问来源于stack exchange,提问作者Bryan Roca
相关产品推荐
相关产品推荐

