2013-10-30 81 views
1

此代碼使Excel無法響應。任何人都知道這可能是爲什麼?如何刪除所有空行

Sub delblank() 
On Error Resume Next 
ActiveSheet.UsedRange.Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
If Err Then 
MsgBox "No blank cells" 
End If 
End Sub 
+2

你可以請通過[常見問題](http://stackoverflow.com/about)並接受所有你有問題的答案。 – Santosh

回答

0

嘗試是這樣的:

Public Sub Tester() 
On Error Resume Next 
Columns(1).SpecialCells(xlBlanks).EntireRow.Delete 
On Error GoTo 0 
End Sub 
-1

試試下面的代碼

Sub delblank() 

    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 

    Dim rng As Range 
    On Error Resume Next 
    Set rng = ActiveSheet.UsedRange.Range("A:A").SpecialCells(xlCellTypeBlanks) 
    On Error GoTo 0 

    If rng Is Nothing Then 
     MsgBox "No cells found" 
    Else 
     rng.EntireRow.Delete 
    End If 

    Application.ScreenUpdating = True 
    Application.Calculation = xlCalculationAutomatic 

End Sub 
+0

這與OP的代碼有什麼不同? –

+0

@ Jean-FrançoisCorbett感謝您通過代碼。對我來說,這段代碼更加結構化並修復了一些問題,例如(錯誤轉到0)。按照Q,代碼使得excel「無響應」,所以代碼沒有錯誤,OP正在尋找更好的性能。我相信'Application.ScreenUpdating = False'&'Application.Calculation = xlCalculationManual'有一定的幫助。 – Santosh

3

的問題是,UsedRange不會接受Range("A:A")作爲一個屬性,因爲在您的工作表的使用範圍不不包含Excel工作表從上到下的整列,即從第1行到第1048756行。

你想,而不是什麼是指的UsedRange第一柱:Columns(1)這樣的替換Range("A:A")

ActiveSheet.UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

現在,它的工作原理。

如果您有很長的方法和屬性鏈給你帶來麻煩,那麼將它分解爲其組成部分以便找到錯誤的來源會更容易。這就是我所做的:

Dim r1 As Range 
Dim r2 As Range 
Dim r3 As Range 
Dim sh As Worksheet 

Set sh = ActiveSheet 
Set r1 = sh.UsedRange 
Set r2 = r1.Range("A:A") ' Aha, error occurs here! Wow, that was easy to find. 
Set r3 = r1.SpecialCells(xlCellTypeBlanks) 
r3.EntireRow.Delete 

當錯誤消失,它的罰款放鏈重新結合在一起,以擺脫雜亂的。

也不要使用On Error Resume Next除非你完全確定這是你想要的,因爲它只會吞下錯誤而不會告訴你它們來自哪裏。