如果不存在过滤条件,请不要将过滤器应用于列

时间:2020-03-16 11:48:03

标签: excel vba

我有以下简单的Excel工作表:

       A             B           C           D
1  Products        Check
2  Product A       OK
3  Product B       OK
4  Product C       OK
5  Product D       OK
6  Product E       OK
7
8

关于此数据,我想使用此VBA运行过滤器:

Sub Filter()
Sheet1.Range("$A$1:$B$1").AutoFilter _
Field:=Sheet1.Range("$B$1").Column, _
Criteria1:="Error"
End Sub

只要VBA至少在Error中出现一次,此Column B即可正常工作。
但是,如您在上面的示例中看到的那样,条件Error根本没有出现。
现在,当我运行VBA时,将过滤器应用于Column B并隐藏所有行,如下所示:

enter image description here

如何修改VBA以便在criteria中不存在过滤器Column的情况下不能应用该过滤器?

1 个答案:

答案 0 :(得分:0)

请尝试以下操作:

Sub testFilterError()
  Dim strErr As String
  strErr = "Error"
   If Application.CountIf(Sheet1.Range("B1:B" & Sheet1.Range("B1").End(xlDown).Row), "Error") > 0 Then
      Sheet1.Range("$A$1:$B$1").AutoFilter _
            field:=Sheet1.Range("$B$1").Column, _
                                Criteria1:=strErr
  Else
    MsgBox "No """ & strErr & """ string in B:B column..."
  End If
End Sub

该代码可以很容易地适应过滤时具有奇怪行为的其他单词...