我有一个带有两个组合框(年份和单位(的用户表单。我有一个大型数据集,我想根据两个组合框中的选择进行过滤,即我选择年份 = 2013,单位 = 20A,我希望它过滤掉具有这两个识别引用的所有数据。
我尝试过依赖组合框无济于事。
到目前为止,我唯一的代码是填充组合框。
Private Sub UserForm_Initialize()
Dim N As Long, i As Long
With Sheets("LookUpLists")
N = .Cells(Rows.Count, 1).End(xlUp).row
O = .Cells(Rows.Count, 2).End(xlUp).row
End With
With cboYear
.Clear
For i = 1 To N
.AddItem Sheets("LookUpLists").Cells(i + 1, 1).Value
Next i
End With
With cboUnit
.Clear
For i = 1 To O
.AddItem Sheets("LookUpLists").Cells(i + 1, 2).Value
Next i
End With
End Sub
所以根据我对你问题的理解,这应该不会太难。您可以使用 CboYear.Value
和 cboUnit.Value
获取组合框的值。然后,您可以将with
块与工作表范围一起使用,并使用两个.autofilter
引用相应的field:=
,即要过滤的列和包含组合框选择的Criteria1:=RespectiveComboBox.Value
。请注意,不为任一框进行选择很可能会导致错误。此外,请考虑将筛选条件放在 ComboBox_Change()
事件上,以确保每次更改选择时它都会更新。
Option Explicit
Private Sub cboYear_Change()
With Sheets("LookUpLists").Range("A1:AZ100") 'replace with an appropriate range
.AutoFilter field:=2, Criteria1:=cboYear.Value 'edit to appropriate field
.AutoFilter field:=3, Criteria1:=cboUnit.Value 'edit to appropriate field
End With
End Sub
Private Sub cboUnit_Change()
With Sheets("LookUpLists").Range("A1:AZ100") 'replace with an appropriate range
.AutoFilter field:=2, Criteria1:=cboYear.Value 'edit to appropriate field
.AutoFilter field:=3, Criteria1:=cboUnit.Value 'edit to appropriate field
End With
End Sub
另外一个注意事项:您应该始终在模块顶部使用Option Explicit
。您可以在VBA -->工具中自动启用它。它将帮助您找到错误和错误(例如不使用Dim
语句声明 O(