我正在使用以下代码进行自动过滤。它的工作正常。问题是如果输出值为空,则过滤器会给出所有值。我正在寻找如果空了它将显示空行。
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
答案 0 :(得分:0)
当过滤器未显示结果时,复制过滤列表中的所有数据是一个已知错误。通常,我使用Application.Subtotal(103, ...)
(SUBTOTAL Function)在对已过滤列表执行任何操作之前检查可见记录。
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
我已经成功地对样本数据进行了测试。比较日期时要小心使用字符串(例如 due )。
当使用VBA过滤列表并随后删除可见记录时,这一点尤为重要,因为没有可见记录会导致整个数据矩阵被删除。此外,从宏运行时,没有UnDo
。