使用自动过滤条件时出错

时间:2017-08-23 10:12:54

标签: excel vba excel-vba

我有一张表FC。使用此工作表,我总是检查S,T和U列。

第一种情况是。

我的列S有"无效",然后我希望隐藏整行。

此外,如果列T和U都被填充,那么我也希望隐藏行。

我执行了以下代码。

Sub fc()
Dim totalrows As Long
totalrows = Range("A5").End(xlDown).Row
  With Sheets("FC").Range("Z5:Z" & totalrows)
    sformula = "=AND(S5<>""Invalid"",OR(ISBLANK(T5),ISBLANK(U5)))"
    .AutoFilter 26, True
    .Formula = sformula
    .Value = .Value
  End With
End Sub

使用此代码,我有一个额外的列Z用作辅助列。因此,如果列S无效,如果列T和5都不是空白,那么我将它们表示为&#34; True&#34;在Z栏中。

这里的问题是,在第一次迭代中,它显示了完美的结果。 (它过滤true并且只显示False)。通过第二次迭代,隐藏整个数据。

我有一个按钮调用此功能。为了不过滤,我使用下面的代码。

Sub UnfilterColumn()

    With Worksheets("FC")
        If Not Worksheets("FC").AutoFilter Is Nothing Then
                ThisWorkbook.Sheets("FC").Range("A4").AutoFilter Field:=26
        End If
    End With


End Sub

问题再次出现,即使在取消未过滤的代码后,第一次按下,我得到结果,第二步,我的所有数据都被隐藏,在第三次按下,我可以看到结果。

有人可以帮我解决这个问题。我相信问题出在我的FC代码中。

还有其他方法可以执行我的要求吗?任何领导都会有所帮助

1 个答案:

答案 0 :(得分:3)

试试这个:

Sub fc()
    Dim totalrows As Long
    Dim FC as Worksheet: Set FC=ThisWorkbook.Worksheets("FC")
    totalrows = FC.Range("A" & FC.Rows.Count).End(xlUp).Row
    sformula = "=AND(S6<>""Invalid"",OR(ISBLANK(T6),ISBLANK(U6)))"
    FC.Range("Z6:Z" & totalrows).Formula = sformula
    With FC.Range("Z5:Z" & totalrows)
        .AutoFilter 26, True
        .Value=.Value2
    End With
End Sub

我假设你在第5行有一个标题。
您必须交换行,因为在输入公式单元格之前根本没有任何值,在.AutoFilter之后,它们被过滤(vbNullString,&#34;&#34;,0等&lt;&gt; True)。
您可以在第二次迭代时看到正确的结果,因为单元格获取了值(变为True),并且由于.AutoFilter只是更改了过滤条件,因此重新过滤了该列并获得了所需的结果。