2011-07-29 636 views
3
Sub main() 
    Dim count As Integer 
    Dim i As Integer 
    count = Range("Q" & Rows.count).End(xlUp).Row 
    MsgBox count 
    For i = 2 To count 
     If Cells(i, "Q").Value = 2 Then 
      Sheets(1).Rows(i).EntireRow.Delete 
     End If 
    Next i 
End Sub 

爲什麼代碼不能馬上工作?當我執行在Excel上面VBA代碼,它刪除某些行,然後用這條消息出來出來:刪除特定列中具有特定值的行

run time error 13 

這是什麼意思?有時候,我得到這個消息:

type mismatch 

在上面的VBA代碼,我想刪除其Q列值是2行,但它不工作。你能讓我知道錯誤在哪裏嗎?

讓我告訴你發生了什麼。該代碼工作,但它刪除某些行,並與運行時錯誤13.中止當我打開我的EXCEL文件中看到的Q柱,我觀察到的是,一些Q柱的行了#REF!

我想這可能是原因,但我怎麼做了呢?我如何讓我的代碼正常工作?我有一個由1,2個值組成的Q列。其中有2個的Q列的行必須刪除,我的意思是整行。

+1

我無法重現錯誤。當程序停止進入你的問題時,你可以編輯'i'的值嗎? – Jacob

+0

您的測試數據的最後一行在Q列中是否有2個? – James

回答

1

在大工作表中循環遍歷每行可能非常耗時。嘗試使用find方法。同時關閉屏幕更新。

Sub HTH() 
    Dim rCell As Range 
    Dim strAddress As String 

    Application.ScreenUpdating = False 

    With ActiveSheet.Columns("Q") 
     Set rCell = .Find(What:=2, LookIn:=xlValues, SearchOrder:=xlByColumns) 

     If Not rCell Is Nothing Then 
      Do 
       strAddress = rCell.Address 
       rCell.EntireRow.Delete 
       Set rCell = .FindNext(Range(strAddress)) 
      Loop Until rCell Is Nothing 
     End If 

    End With 

    Application.ScreenUpdating = True 

End Sub 
2

如果列#10 = = 2,那麼你刪除列#10;在循環的下一次迭代中,您將檢查行#11,該行現在具有行#12的值,因爲它在刪除後向上移動,這意味着您可以跳過正在刪除行下面的任何行。

你可能要循環向後;

Sub main() 
    Dim count As Integer 
    Dim i As Integer 
    '//assuming all filled rows from Q2 downwards? 
    count = Range("Q2").End(xlDown).Row 

    For i = count To 2 Step -1 
     If Cells(i, "Q").Value = 2 Then 
      Sheets(1).Rows(i).EntireRow.Delete 
     End If 
    Next i 
End Sub 
+0

向後循環很棒。 ^^很好的答案! – aevanko

相關問題