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



我想我需要一个循环函数,但我不确定该怎么做。

此操作的任务是查看特定列是否为空,然后删除该行。但是有时没有空白单元格,并且我收到结束调试错误。

这是我的代码:

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放在你的Delete行之前怎么样?喜欢这个:

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

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

虽然丹尼尔库克是对的,但您可以使用 On Error Resume Next ,这是另一种解决方法,因为使用 On Error Resume Next 实际上是 VBA (IMO) 中的最后选择。

下面的代码在尝试使用 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

这是我用于该类型操作的一段代码。

子清除空白()

昏暗我只要

对于 i = 范围("B65536")。结束(xlUp)。行到 8 步 -1
如果 IsEmpty(Cells(i, 4)) 则为 rows(i)。删除

下一页

i

结束子

我希望这有帮助!

今天之前没有使用过 VBA,所以我相信有一种更整洁的方法......但是此代码将删除至少包含一个空单元格的任何行。它假设您有一个标题行,并且第一列用于 ID,因此不会"查看"这些单元格。

这个脚本的好处是它适用于任何大小的电子表格,因此您不需要每次都对值进行硬编码:

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

万事如意,

斯科特

最新更新