使用VBA删除Excel中的空行

use*_*125 10 excel vba

我试图通过使用以下代码删除空行:

worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但给予 run time error '1004': No Cells were found.

Jon*_*n49 14

On Error Resume Next
worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
Run Code Online (Sandbox Code Playgroud)

当没有空白单元格时,错误处理会有所帮助.SpecialCells(xlCellTypeBlanks)如果没有像这样的单元格将始终返回错误,因此如果您想使用错误处理是我知道的唯一方法(如果我知道的话)SpecialCells(xlCellTypeBlanks).


Dou*_*ncy 7

你需要测试是否有任何空白.

If WorksheetFunction.CountBlank(Worksheet.Columns("A:A")) > 0 Then
    Worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End If
Run Code Online (Sandbox Code Playgroud)

如果没有空格,您可以使用On Error Resume Next跳过该行,但通常最好测试特定条件,而不是假设您知道错误是什么.

据我所知,如果A列中的每个单元格都有一个值,那么你只会得到"No Cells Found"消息.

编辑:基于@ brettdj的评论,这里是一个仍然使用CountBlank的替代方案:

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

当然,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
Run Code Online (Sandbox Code Playgroud)

最后一点 - 我将变量从"工作表"更改为"ws",因为"工作表"是Excel保留字.