2013-06-18 84 views
1

我正在編寫一個宏,該宏刪除使用公式找到的值中小於.75的所有行。在另一個線程中,在這裏,我發現了一個可以工作的循環,但是這需要花費很多時間來運行...所以我試圖找到沒有循環的方式。到目前爲止,我有如下所示的代碼,但我上線刪除沒有符合特定條件的循環的行

ws.Range(Left(rowsToDelete, Len(rowsToDelete) - 1)).Select 

任何人有一個校正任何想法得到一個「運行時錯誤1004,方法‘工作表對象的範圍’失敗」?所有的幫助表示讚賞

Private Sub CommandButton6_Click() 
Application.ScreenUpdating = False 

Dim ws As Worksheet 
Dim i&, lr&, rowsToDelete$, lookFor$, lookFor2$ 

'*!!!* set the condition for row deletion 
lookFor = "#VALUE!" 
lookFor2 = "0.75" 

Set ws = ThisWorkbook.Sheets("Entry") 
lr = ws.Range("H" & Rows.Count).End(xlUp).row 

ReDim arr(0) 

For i = 1 To lr 
If StrComp(CStr(ws.Range("H" & i).Text), lookFor, vbTextCompare) = 0 Or _ 
    CDbl(ws.Range("H" & i).Value) < CDbl(lookFor2) Then 
    ReDim Preserve arr(UBound(arr) + 1) 
    arr(UBound(arr) - 1) = i 
End If 
Next i 

If UBound(arr) > 0 Then 
    ReDim Preserve arr(UBound(arr) - 1) 
    For i = LBound(arr) To UBound(arr) 
     rowsToDelete = rowsToDelete & arr(i) & ":" & arr(i) & "," 
    Next i 

    ws.Range(Left(rowsToDelete, Len(rowsToDelete) - 1)).Select 
    Selection.Delete Shift:=xlUp 

    lr = ws.Range("A" & Rows.Count).End(xlUp).row 
    ws.Range(lr & ":" & lr).Select 
Else 
    Application.ScreenUpdating = True 
    MsgBox "No more rows contain: " & lookFor & "or" & lookFor2 & ", therefore exiting" 
    Exit Sub 
End If 

If Not Application.ScreenUpdating Then Application.ScreenUpdating = True 
Set ws = Nothing 
End Sub 
+1

您可以使用specialcells來抓取任何公式錯誤單元格,並刪除一次命中的行,然後使用自動篩選器並刪除另一個命中的.75行(使用.Text屬性很慢) – JosieP

回答

2

這裏有一種方法:

Sub Macro1() 

With Application 
    .ScreenUpdating = False 
    .Calculation = xlCalculationManual 
    .EnableEvents = False 
End With 

    Dim r As Range 

    Set r = Sheet1.UsedRange 

    r.AutoFilter Field:=8, Criteria1:="<.75", _ 
     Operator:=xlAnd 
    r.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
    r.AutoFilter 

With Application 
    .ScreenUpdating = True 
    .Calculation = xlCalculationAutomatic 
    .EnableEvents = True 
End With 

End Sub 

這是假設H列(或8在上面的代碼)持有要篩選的價值。您必須調整以適合您的工作表。

+0

這正確地找到了我需要的行它找到,但沒有刪除所有的行。這些值是否來自公式,這是否有所不同?還有#Ref!和#Value!遺留下來。 – Mike

+0

@Mike啊......我的猜測是#Ref!和#Value!不小於.75。讓我搗鼓,我可以拿出... – sous2817

+0

我發現了另一個類別來過濾解決剩餘單元格的問題,所以宏正常工作(在列b)。我感謝幫助! – Mike