首页 > 解决方案 > 如果过滤条件不存在,请勿将过滤器应用于列

问题描述

我有以下简单的 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并隐藏所有如下所示的行:

在此处输入图像描述

如何,如果过滤器不存在过滤器不应用于它,我是否必须修改我的VBAso ?criteriaColumn

标签: excelvba

解决方案


请试试这个:

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

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


推荐阅读