Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用自动筛选条件时出错_Vba_Excel - Fatal编程技术网

Vba 使用自动筛选条件时出错

Vba 使用自动筛选条件时出错,vba,excel,Vba,Excel,我有一张床单。在这张表中,我总是检查S、T和U列 第一个案例是 I列S有“invalid”,那么我想隐藏整行 此外,如果列T和U都已填充,那么我还希望该行被隐藏 我执行了下面的代码 Sub fc() Dim totalrows As Long totalrows = Range("A5").End(xlDown).Row With Sheets("FC").Range("Z5:Z" & totalrows) sformula = "=AND(S5<>""Inval

我有一张床单。在这张表中,我总是检查S、T和U列

第一个案例是

I列S有“invalid”,那么我想隐藏整行

此外,如果列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
再次出现的问题是,即使在取消过滤代码后,第一次按下,我得到了结果,第二步,我所有的数据都被隐藏,在第三次按下时,我可以看到结果

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


有没有其他方法来执行我的要求?任何线索都会有帮助的

试试这个:

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
Sub-fc()
所有行的长度相同
将FC设置为工作表:设置FC=此工作簿。工作表(“FC”)
totalrows=FC.Range(“A”&FC.Rows.Count).End(xlUp).Row
sformula=“=和(S6”“无效”“或(ISBLANK(T6)、ISBLANK(U6)))
FC.范围(“Z6:Z”和totalrows)。公式=s公式
带FC.范围(“Z5:Z”和totalrows)
.AutoFilter 26,正确
.Value=.Value2
以
端接头
我假设您在第5行有一个标题。
您必须交换行,因为在输入公式之前,单元格在
之后根本没有值。AutoFilter
之后,它们被过滤(vbNullString,“,0等。True)。

您可以在第二次迭代中看到正确的结果,因为单元格要求值(变为True),并且由于
。AutoFilter
只需更改筛选条件,即可重新筛选列并获得所需的结果。

尝试以下操作:

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
Sub-fc()
所有行的长度相同
将FC设置为工作表:设置FC=此工作簿。工作表(“FC”)
totalrows=FC.Range(“A”&FC.Rows.Count).End(xlUp).Row
sformula=“=和(S6”“无效”“或(ISBLANK(T6)、ISBLANK(U6)))
FC.范围(“Z6:Z”和totalrows)。公式=s公式
带FC.范围(“Z5:Z”和totalrows)
.AutoFilter 26,正确
.Value=.Value2
以
端接头
我假设您在第5行有一个标题。
您必须交换行,因为在输入公式之前,单元格在
之后根本没有值。AutoFilter
之后,它们被过滤(vbNullString,“,0等。True)。

您可以在第二次迭代中看到正确的结果,因为单元格需要值(变为True)由于
.AutoFilter
只需更改筛选条件,他就重新筛选了列并得到了所需的结果。

Value=.Value背后的意图是什么?@DavidG要隐藏公式并将其作为值进行交换,请尝试交换
。AutoFilter 26,True
。formula=sformula
(公式一,过滤器二). 另外,请注意,您有一个标题。@AntiDrondert它有效:)您可以发布,我会将其标记为答案。但我想知道交换的原因。你能解释一下
.Value=.Value
背后的意图吗?@DavidG隐藏公式并将其作为值尝试交换
.AutoFilter 26,True
.formula=sformula
(公式第一,过滤器第二)。另外,请注意,您有一个标题。@AntiDrondert它有效:)您可以发布,我会将其标记为答案。但我想知道交换的原因。你能explain@could请你解释一下交换线路的原因。这将有助于我在未来的回答,解释below@could请你解释一下交换线路的原因。这将有助于我在未来的答案,解释如下