如何删除所有空白行

时间:2013-10-30 05:56:00

标签: vba excel-vba excel

此代码使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

3 个答案:

答案 0 :(得分:3)

问题是UsedRange不接受Range("A:A")作为属性,因为工作表中使用的范围不包含Excel工作表从上到下的整列,即从第1行开始排1048756.

您想要的是引用UsedRange的第一列:将Range("A:A")替换为Columns(1),如下所示:

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,因为它只会吞下错误而不会告诉你它们来自哪里。

答案 1 :(得分:0)

尝试这样的事情:

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

答案 2 :(得分:-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