【问题标题】:Userform Combobox search but clear if blank用户表单组合框搜索,但如果为空则清除
【发布时间】:2019-08-10 20:53:41
【问题描述】:

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

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

有人可以帮忙吗?

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

【问题讨论】:

  • 请更具体地说明你的意思 "如果空白 然后不要在 该列"上应用任何过滤器>.
  • 嗨@Pᴇʜ 如果用户不想应用站点过滤器,那么它将显示所有站点。当前的代码似乎将它们全部隐藏了。
  • 什么“网站过滤器”?你的问题中没有出现这个词。你需要更具体。请阅读How to Ask 然后edit 您的问题。您将需要不止一句话来改进它并使其更清晰。
  • 听起来您正在尝试复制自动过滤器功能。为什么用户不能只使用 Excel 中提供的过滤器而不是使用表单来做完全相同的事情?

标签: excel vba sorting filter combobox


【解决方案1】:

您可以编写一个简单的 If 语句来检查组合框是否有值,如果是,则使用过滤器设置表,否则省略 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

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 2013-10-16
    • 2019-09-30
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    相关资源
    最近更新 更多