Excel Vba-动态筛选范围删除

Excel Vba-动态筛选范围删除,excel,vba,Excel,Vba,我有下面的代码块来删除各种错误,并为数据分配错误代码描述。只要过滤器返回结果,它就可以正常工作。如果没有,则删除标题行。我怎样才能防止这种情况发生?提前谢谢 Sheets("Tempsheet").Select Range("A1:K1").AutoFilter Range("A1:K1").AutoFilter Field:=5, Criteria1:="0", Criteria2:=0 Range("K2:K" & Range("A" & Rows.Count).End(xl

我有下面的代码块来删除各种错误,并为数据分配错误代码描述。只要过滤器返回结果,它就可以正常工作。如果没有,则删除标题行。我怎样才能防止这种情况发生?提前谢谢

Sheets("Tempsheet").Select
Range("A1:K1").AutoFilter
Range("A1:K1").AutoFilter Field:=5, Criteria1:="0", Criteria2:=0
Range("K2:K" & Range("A" & Rows.Count).End(xlUp).Row).Formula = "Excluded: $0.00 Amount"
Range("A2:K" & Range("A" & Rows.Count).End(xlUp).Row).EntireRow.Copy
Sheets("Excluded").Select
Range("A2").PasteSpecial
Sheets("Tempsheet").Select
Range("A2:K" & Range("A" & Rows.Count).End(xlUp).Row).EntireRow.Delete
Sheets("Tempsheet").AutoFilterMode = False

如果筛选器未返回任何数据,则
范围(“A2:K”和范围(“A”和Rows.Count).End(xlUp).Row)
将返回第1行,因此在执行删除操作之前测试
行>1

If Range("A2:K" & Range("A" & Rows.Count).End(xlUp).Row).Row > 1 then
    ... .Delete
End If

如果筛选器未返回任何数据,则
范围(“A2:K”和范围(“A”和Rows.Count).End(xlUp).Row)
将返回第1行,因此在执行删除操作之前测试
行>1

If Range("A2:K" & Range("A" & Rows.Count).End(xlUp).Row).Row > 1 then
    ... .Delete
End If

类似于下面的代码,它测试一个过滤器的结果

Dim ws As Worksheet
Dim ws2 As Worksheet
Set ws = Sheets("Tempsheet")
Set ws2 = Sheets("Excluded")
Set rng1 = ws.Range(ws.[a1], ws.Cells(Rows.Count, "k").End(xlUp))
rng1.AutoFilter Field:=5, Criteria1:="0", Criteria2:=0
If rng1.SpecialCells(xlVisible).Rows.Count > 1 Then
    ws.Range("K2:K" & Range("A" & Rows.Count).End(xlUp).Row).Formula = "Excluded: $0.00 Amount"
    ws.Range("A2:K" & Range("A" & Rows.Count).End(xlUp).Row).EntireRow.Copy
    ws2.[a2].PasteSpecial Paste:=xlPasteValues
    rng1.Offset(1, 0).Resize(rng1.SpecialCells(xlVisible).Rows.Count - 1).EntireRow.Delete
End If
Sheets("Tempsheet").AutoFilterMode = False

类似于下面的代码,它测试一个过滤器的结果

Dim ws As Worksheet
Dim ws2 As Worksheet
Set ws = Sheets("Tempsheet")
Set ws2 = Sheets("Excluded")
Set rng1 = ws.Range(ws.[a1], ws.Cells(Rows.Count, "k").End(xlUp))
rng1.AutoFilter Field:=5, Criteria1:="0", Criteria2:=0
If rng1.SpecialCells(xlVisible).Rows.Count > 1 Then
    ws.Range("K2:K" & Range("A" & Rows.Count).End(xlUp).Row).Formula = "Excluded: $0.00 Amount"
    ws.Range("A2:K" & Range("A" & Rows.Count).End(xlUp).Row).EntireRow.Copy
    ws2.[a2].PasteSpecial Paste:=xlPasteValues
    rng1.Offset(1, 0).Resize(rng1.SpecialCells(xlVisible).Rows.Count - 1).EntireRow.Delete
End If
Sheets("Tempsheet").AutoFilterMode = False

谢谢你的回答,这正是我需要的!没问题。值得注意的是,无论您的数据布局如何,SpecialCells方法都会起作用(即从第2行或第10行而不是第1行开始),因此它提供了超出当前布局的灵活性。感谢您提供的所有答案,正是我所需要的!没问题。值得注意的是,SpecialCells方法无论您的数据布局如何(即从第2行或第10行而不是第1行开始),都可以工作,因此它提供了超出当前布局的灵活性。