我正在尝试使用以下代码删除空行:
worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
上述代码运行正常,但出现了运行时错误 '1004':未找到任何单元格。
On Error Resume Next
worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
如果没有空单元格,错误处理很有帮助。当不存在这样的单元格时,SpecialCells(xlCellTypeBlanks)
总是会返回一个错误,所以错误处理是(我所知道的)唯一的方法,如果你想使用 SpecialCells(xlCellTypeBlanks)
。
您需要测试是否存在任何空白。
If WorksheetFunction.CountBlank(Worksheet.Columns("A:A")) > 0 Then
Worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End If
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
最后一点注意事项 - 我将变量从“worksheet”更改为“ws”,因为“worksheet”是Excel保留字。
对我来说工作得很好。这些语句对我没有任何错误。
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
dim wsheet as worksheets
set wsheet = worksheets("worksheetname") or worksheets("sheet1")
wsheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
另一种方式:
If Range("Table2").Rows.Count > 1 Then
Range("Table2").EntireRow.Delete
End If
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