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
祝一切顺利,
斯科特