用户表单组合框搜索,但如果为空则清除

时间:2019-03-20 08:06:40

标签: excel vba sorting filter combobox

我有一个用户窗体,用户从下拉框中输入选择内容,一旦按下命令按钮,它将过滤并排序工作表以显示所需的内容。

但是,我正在努力寻找一种解决方案,该解决方案指出如果为空,则不要对该列应用任何过滤器。

有人可以协助吗?

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

1 个答案:

答案 0 :(得分:1)

您可以编写一个简单的If语句来检查combox是否具有值,然后使用过滤器设置该表,否则省略Criteria1参数。

More Information on Criteria1 Argument of Range Autofilter method can be found here

尝试这样的事情:

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
相关问题