Excel VBA:高级过滤空白不起作用

Excel VBA: Advanced Filtering Blanks Not Working

我有一个用户表单,它使用复选框过滤掉特定列的空白。过滤范围为Sheet1A1:C10,条件范围为Sheet2A1:C2.

如果选中:不筛选 C 列 如果未选中:过滤掉列 C

上的空白

我环顾四周,发现在高级过滤器上过滤空白的运算符是“=”。因此,当我在用户窗体上按下按钮时处理过滤器时,我将 Sheet 2 C2 设置为 "="

If Checkbox1.Value Then
    Sheets(2).Range("C2").Value = ""
Else
    Sheets(2).Range("C2").Value = "="
End If

Sheets(1).Range("A1:C10").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
    Sheets(2).Range("A1:C2"), Unique:=False

当我处理这个时,所有条目都消失了,甚至是空白。如果我使用也是如此:

Else
    Sheets(2).Range("C2").Value = "<>"

这应该显示非空白,但它隐藏了所有行。

这是关键;为了排除故障,我录制了一个自动过滤空白的宏,它给了我这个:

ActiveSheet.Range("$A:$C").AutoFilter Field:=3, Criteria1:="="

所以,过滤“=”好像是对的,只是不想和我一起工作


旁注: 只是为了好玩,我认为标准单元格需要显示 ="",这意味着公式将显示为 ="=""""" ,这意味着 VBA 将显示为:

Else
    Sheets(2).Range("C2").Value = "=""="""""""""""

这也不行。


编辑: @Scott,我有以下四行。 None 其中似乎有效。链接页面显示了一个删除空白的示例,而不是专门显示它们。因此,除了 >0.

之外,我还尝试了 =0
Else
    Sheets(2).Range("C2").Value = "=LEN(Sheet1!C2)=0"

Else
    Sheets(2).Range("C2").Value = "=""=LEN(Sheet1!C2)=0"""

Else
    Sheets(2).Range("C2").Value = "=LEN(Sheet1!C2)>0"

Else
    Sheets(2).Range("C2").Value = "=""=LEN(Sheet1!C2)>0"""

好的,我们错过了一步。

C1 on sheet2 needs to be empty.

公式将处理过滤部分。

那么代码是:

If Checkbox1.Value Then
    Sheets(2).Range("C2").Value = ""
Else
    Sheets(2).Range("C2").Formula = "=LEN(Sheet1!C2)=0"
End If

Sheets(1).Range("A1:C10").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
    Sheets(2).Range("A1:C2"), Unique:=False