2011-10-18 119 views
0

我有以下代碼塊來取出各種錯誤並將錯誤代碼描述分配給數據。只要過濾器返回結果,它就可以正常工作。如果沒有,則刪除標題行。我怎樣才能防止這種情況發生?提前致謝。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(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 
+0

感謝您對所有問題的答案,正是我需要的! – kwilmarth

+0

沒問題。值得注意的是,無論您的數據佈局如何(即,如果它開始於第2行還是第10行而非第1行),SpecialCells方法都可以工作,因此它提供了超出當前佈局的靈活性。 – brettdj

回答

3

如果沒有數據被過濾器返回然後Range("A2:K" & Range("A" & Rows.Count).End(xlUp).Row)將返回第1行,所以測試row > 1做刪除

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

事情是這樣的代碼測試對於一個過濾結果應該這樣做之前,

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 
0
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 

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

Sheets("Tempsheet").AutoFilterMode = False