VBA如果单元格空白,删除行,如果没有单元格空白,结束序列

我想我需要一个循环function,但我不知道如何去做。

此任务是查看特定列是否为空,然后删除该行。 但有时没有空白的单元格,我正在得到一个结束debugging错误。

这是我的代码:

Sub DeleteRow() Dim lr As Long Dim shCurrentWeek As Worksheet Set shCurrentWeek = AciveWorkbook.Sheets("Current Week") lr = shCurrentWeek.Range("A" & Rows.Count).End(xlUp).Row 'Delete Row shCurrentWeek.Range("B4:B" & lr).SpecialCells(xlCellTypeBlanks).EntireRow.Delete End Sub 

有任何想法吗?

虽然丹尼尔库克是正确的,你可以使用On Error Resume Next ,这是另一种方式去解决它,因为使用On Error Resume Next是VBA(IMO)中的最后一个select。

下面的代码在尝试使用SpecialCells方法之前检查空白。

 Option Explicit Sub DeleteRow() Dim lr As Long Dim shCurrentWeek As Worksheet Set shCurrentWeek = ActiveWorkbook.Sheets("Current Week") lr = shCurrentWeek.Range("A" & Rows.Count).End(xlUp).Row If Application.WorksheetFunction.CountBlank(shCurrentWeek.Range("B4:B" & lr)) <> 0 Then shCurrentWeek.Range("B4:B" & lr).SpecialCells(xlCellTypeBlanks).EntireRow.Delete End If End Sub 

如何把on error resume next到你的Delete行之前? 喜欢这个:

 On error resume next shCurrentWeek.Range("B4:B" & lr).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

我假设你不在乎它是否失败,所以没有必要做错误诱捕。 这将保持显示错误消息,如果没有从您的调用返回SpecialCells单元格的单元格。

这是我用于这种types的操作的一段代码。

Sub ClearBlank()

昏暗我只要

对于i = Range(“B65536”)。End(xlUp).Row To 8 Step -1
如果IsEmpty(Cells(i,4))Then Row(i).Delete

接下来我

结束小组

我希望这有帮助!

在今天之前不使用VBA,所以我确信有一个更好的方法…但是这个代码会删除至less有一个空单元格的行。 它假定你有一个标题行,并且第一列用于标识,所以这些单元不被“看着”。

关于这个脚本的好处是,它适用于任何大小的电子表格,所以你不需要每次硬编码值:

 Sub DeleteIncompleteRows() Dim row As Integer, col As Integer Dim deleted As Integer deleted = 0 Dim actualRow As Integer Dim totalRows As Integer Dim totalCols As Integer totalRows = Application.CountA(Range("A:A")) totalCols = Application.CountA(Range("1:1")) For row = 2 To totalRows actualRow = row - deleted For col = 2 To totalCols If ActiveSheet.Cells(actualRow, col).Value = "" Then ActiveSheet.Rows(actualRow).Delete deleted = deleted + 1 Exit For End If Next col Next row End Sub 

祝一切顺利,

斯科特