如何根据用户窗体中两个单独组合框中的选择筛选数据



我有一个带有两个组合框(年份和单位(的用户表单。我有一个大型数据集,我想根据两个组合框中的选择进行过滤,即我选择年份 = 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.ValuecboUnit.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(

最新更新