VBA用户窗体ComboBox联动:匹配工作表数据填充下拉框
完善VBA代码实现双条件筛选填充ComboBox
需求回顾
在模态用户窗体中,选择第一个下拉框ddlArtist的值后,需从shInventory工作表的tblInventory表格中筛选满足以下两个条件的行:
- B列(艺术家名称)与
ddlArtist选中值匹配 - G列(状态)为"A"
然后将这些行对应的C列(艺术品)数据填充到第二个下拉框ddlArtwork中。
完善后的代码
替换原ddlArtist_Click过程的代码为以下内容:
Private Sub ddlArtist_Click() ddlArtwork.Clear ' 先判断是否选择了艺术家,避免空值筛选 If ddlArtist.Value = "" Then Exit Sub Dim dataRows As Range Dim aRow As Range ' 直接获取表格的数据行(跳过表头,比遍历整个表格更高效) Set dataRows = shInventory.ListObjects("tblInventory").DataBodyRange ' 遍历每一行进行双条件判断 For Each aRow In dataRows ' 同时检查B列(第2列)匹配艺术家,且G列(第7列)状态为"A" If aRow.Cells(1, 2).Value2 = ddlArtist.Value And _ UCase(aRow.Cells(1, 7).Value2) = "A" Then ddlArtwork.AddItem aRow.Cells(1, 3).Value2 End If Next aRow End Sub
关键修改说明
- 添加状态条件:在
If判断里新增了对G列(第7列)状态为"A"的检查,用UCase()统一转成大写,避免大小写不匹配的问题。 - 优化遍历范围:使用
DataBodyRange直接获取表格的数据行,跳过了表头行,不用额外判断是否是表头,更高效。 - 增加空值判断:先检查
ddlArtist是否有选中值,避免未选择时执行无效遍历。 - 明确单元格引用:把
aRow.Value2(1, x)改成aRow.Cells(1, x).Value2,代码可读性更强。
内容的提问来源于stack exchange,提问作者user3544580
相关产品推荐
相关产品推荐

