首页 > 解决方案 > 用户表单组合框搜索,但如果为空则清除

问题描述

我有一个用户表单,用户从下拉框中输入选择,一旦按下命令按钮,它就会过滤和排序工作表以向他们显示所需的内容。

但是,我正在努力寻找一个解决方案,如果为空白则不在该列上应用任何过滤器。

有人可以帮忙吗?

Private Sub CommandButton1_Click()
    ThisWorkbook.Sheets("Employee List").Visible = True
    ThisWorkbook.Sheets("Employee List").Select

    Sheets("Employee List").CommandButton1.Visible = False
    Sheets("Employee List").CommandButton2.Visible = False
    Sheets("Employee List").CommandButton3.Visible = True
    Sheets("Employee List").CommandButton4.Visible = True

    Worksheets("Employee List").ListObjects("Employee_List").Range.AutoFilter Field:=7, Criteria1:=ComboBox1.Value, Operator:=xlAnd
    Worksheets("Employee List").ListObjects("Employee_List").Range.AutoFilter Field:=8, Criteria1:=ComboBox2.Value, Operator:=xlAnd
    Worksheets("Employee List").ListObjects("Employee_List").Range.AutoFilter Field:=12, Criteria1:="True", Operator:=xlAnd
    Worksheets("Employee List").ListObjects("Employee_List").Range.AutoFilter Field:=30, Criteria1:="<=" & Me.ComboBox3.Value, Operator:=xlAnd
    Worksheets("Employee List").ListObjects("Employee_List").Range.AutoFilter Field:=31, Criteria1:="Yes", Operator:=xlAnd
    Worksheets("Employee List").ListObjects("Employee_List").Range.AutoFilter Field:=32, Criteria1:="No"

    Worksheets("Employee List").Columns("E:E").EntireColumn.Hidden = True
    Worksheets("Employee List").Columns("I:P").EntireColumn.Hidden = True
    Worksheets("Employee List").Columns("R:S").EntireColumn.Hidden = True
    Worksheets("Employee List").Columns("T:T").EntireColumn.Hidden = True
    Worksheets("Employee List").Columns("V:AF").EntireColumn.Hidden = True

    Me.Hide
    ActiveWorkbook.Save
End Sub

标签: excelvbasortingfiltercombobox

解决方案


您可以编写一个简单的 If 语句来检查组合框是否有值,如果是,则使用过滤器设置表,否则省略 Criteria1 参数。

有关范围自动过滤方法的 Criteria1 参数的更多信息,请参见此处

尝试这样的事情:

If UserForm1.ComboBox1.Value <> "" Then
    Worksheets("Sheet1").ListObjects("Table1").Range.AutoFilter field:=1, _
    Criteria1:=UserForm1.ComboBox1.Value
Else
    Worksheets("Sheet1").ListObjects("Table1").Range.AutoFilter field:=1
End If

推荐阅读