当输出为空时,excel中的自动筛选失败(当输出为空时,它会带来所有)

当输出为空时,excel中的自动筛选失败(当输出为空时,它会带来所有),excel,filter,vba,Excel,Filter,Vba,我使用以下代码自动过滤。它工作得很好。问题是,如果输出值为空,过滤器将给出所有值。我正在寻找是否为空,它将显示空行 Sub filter() Application.ScreenUpdating = False Dim Location As String Dim due As String Sheets("sheet2").Activate due = Range("b14").Value Location =

我使用以下代码自动过滤。它工作得很好。问题是,如果输出值为空,过滤器将给出所有值。我正在寻找是否为空,它将显示空行

Sub filter()
       Application.ScreenUpdating = False
       Dim Location As String
       Dim due As String
       Sheets("sheet2").Activate
       due = Range("b14").Value
       Location = Range("a14").Value
       Range("a16:j1000").ClearContents
       Sheets("Sheet1").Select
       Range("a1:j1000").Select
       Selection.AutoFilter
       ActiveSheet.Range("$A$1:$j$1000").AutoFilter Field:=1, Criteria1:=due
       ActiveSheet.Range("$A$1:$j$1000").AutoFilter Field:=2, Criteria1:=Location
       Range("c2:i1000").Select
       Selection.Copy
       Sheets("sheet2").Activate
       Range("b16").Select
       Selection.PasteSpecial
       Sheets("sheet1").Select
       Selection.AutoFilter
       Sheets("sheet2").Select
       Range("b16").Activate
       Application.ScreenUpdating = True
    End Sub

当筛选器未显示任何结果时,复制筛选列表中的所有数据是一个已知错误。通常,在对过滤列表执行任何操作之前,我使用
Application.Subtotal(103,…)
()检查可见记录

Sub filter()
    Application.ScreenUpdating = False
    Dim Location As String, due As String

    With Sheets("sheet2")
        due = .Range("b14").Value
        Location = .Range("a14").Value
        .Range("a16:j1000").ClearContents
    End With

    With Sheets("sheet1").Range("a1:j1000")
        .AutoFilter
        .AutoFilter Field:=1, Criteria1:=due
        .AutoFilter Field:=2, Criteria1:=Location
        With .Offset(1, 2).resize(.rows.count - 1, 7)
            If CBool(Application.Subtotal(103, .Cells)) Then _
                .Copy Destination:=Sheets("sheet2").Range("b16")
        End With
        .AutoFilter
    End With

    With Sheets("sheet2")
        .Activate
        Range("b16").Activate
    End With
    Application.ScreenUpdating = True
End Sub
我已经在样本数据上成功地进行了测试。在比较日期时,请小心使用字符串(例如到期日)


当使用VBA筛选列表并随后删除可见记录时,这一点尤为重要,因为没有可见记录将导致删除整个数据矩阵。此外,当从宏运行时,此操作没有
撤消

@ser3766722-顺便说一句,您可以在
小计中使用3或103作为函数编号;两者都只计算可见值。我通常使用103,因为它提醒我,我特别关注只计算可见值。我在哪里设置过滤器范围?。范围(“c2:i1000”)。Select@user3766722-当您将
与。。。以
子句结尾,任何以句点为前缀的内容都指指定的范围或工作表。在上面的例子中,我将
用于图纸(“sheet1”).Range(“a1:j1000”)
然后在其中使用
.AutoFilter
,因此您可能希望将
用于图纸(“sheet1”).Range(“ac1:i1000”)
。是的,过滤器范围是a1:j1000,但我不想从a。我只想搜索值应该是a1:j1000,输出应该只显示c2:j1000。您可以参考我的代码范围(“c2:i1000”)。选择选择。Copy@user3766722-谢谢你澄清这一点。我已经调整了
.Offset
命令,并使用
Resize
来缩小引用的列。我仍然不确定你指的是C2:J1000还是C2:I1000,但如果我犯了错误,你知道在哪里更正它。