2011-10-24 169 views
9

我嘗試使用下面的代碼來刪除空行:刪除Excel中的空行使用VBA

worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

上面的代碼工作正常,但給人run time error '1004': No Cells were found.

回答

13
On Error Resume Next 
worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
On Error GoTo 0 

任何意義的時候有沒有空單元格的錯誤處理幫助。如果沒有像這樣的單元格,則SpecialCells(xlCellTypeBlanks)將始終返回錯誤,因此如果要使用SpecialCells(xlCellTypeBlanks),錯誤處理是處理它的唯一方法(我知道)。

+1

+1有效答案 – brettdj

+0

解釋這些額外的行準確會有多大幫助:-) – Enissay

2

做工精細和我在一起。這些語句不拋出任何錯誤我

Sheet1.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'perfect 

我發現你的問題

On Error Resume Next 
Sheet1.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
On Error GoTo 0 

這些類型的解決方案在這些鏈接看看

http://www.excelforum.com/excel-programming/390329-microsoft-visual-basic-run-time-error-1004-no-cells-were-found.html

http://www.mrexcel.com/forum/showthread.php?t=343744

以及是的喲你設定了你的目標?工作表並不在這裏做

​​
+0

+1的錯誤處理建議。我同意「工作表」不是最好的變量名稱。 – brettdj

7

您需要測試是否有空白。

If WorksheetFunction.CountBlank(Worksheet.Columns("A:A")) > 0 Then 
    Worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
End If 

你可以使用上的錯誤繼續下一步如果沒有空白的行跳過,但它通常最好測試特定的條件,而不是假設你知道錯誤是什麼。

就我所見,如果列A中的每個單元格都有值,則只會顯示「找不到單元格」消息。

編輯:基於@ brettdj的評論,下面是一個仍然使用COUNTBLANK一種替代方案:

If WorksheetFunction.CountBlank(Intersect(worksheet.UsedRange, ws.Columns("A:A"))) > 0 Then 
    worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
End If 

當然UsedRange的是出了名的善變和可能大於它出現。我認爲這是最好先確定實際的範圍,其中行是被刪除,然後檢查SpecialCells在這個範圍內,例如:

Sub DeleteRows() 
Dim ws As Excel.Worksheet 
Dim LastRow As Long 

Set ws = ActiveSheet 
LastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row 
With ws.Range("A2:A" & LastRow) 
    If WorksheetFunction.CountBlank(.Cells) > 0 Then 
     .SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
    End If 
End With 
End Sub 

最後一個音符 - 我的「工作」到「WS改變變量「as」工作表「是一個Excel保留字。

+0

Doug,該代碼仍然會因爲上面使用的CountBlank查看A列中的每個單元格而導致OP問題失敗 - 因此它的虛擬確定這個條件總是爲真。雖然SpecialCells只是在使用的範圍內,並且可能沒有空白單元格,即_「就我所見,如果列A中的每個單元格的值都是」_不正確「,則只會顯示」未找到單元格「消息 – brettdj

+0

brettdj,感謝您的信息。我想知道OP在整個專欄中使用它的事實,現在我明白這可能會起作用。 –

+0

乾杯道格。 SpecialCells可以更直觀地解釋它是。 – brettdj

1

另一種方式:

If Range("Table2").Rows.Count > 1 Then 
    Range("Table2").EntireRow.Delete 
End If 
0
Sub delete_rows_blank() 

t = 1 
lastrow = ActiveSheet.UsedRange.Rows.Count 
Do Until t = lastrow 
If Cells(t, "A") = "" Then 
Rows(t).Delete 
End If 
t = t + 1 
Loop 

End Sub 
+0

考慮添加更多來解釋代碼在做什麼。 – gms0ulman

+0

對不起 - 宏只是通過列「A」循環爲空單元格,如果是,則刪除行。 (您可以調整拉斯特羅或列字母以符合您的需求)。希望這可以幫助 ! :) –