我认为我需要一个循环功能,但我不知道该怎么做。
此任务是查看特定列是否为空,然后删除该行。但有时没有空白单元格,我得到了一个结束调试错误。
这是我的代码:
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
任何想法?
答案 0 :(得分:3)
如果只将on error resume next
放在Delete
行之前呢?喜欢这个:
On error resume next
shCurrentWeek.Range("B4:B" & lr).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
我假设你不关心它是否失败,所以不需要进行错误捕获。如果从您的SpecialCells
调用中没有返回任何单元格,则会显示错误消息。
答案 1 :(得分:2)
虽然Daniel Cook是对的,但您可以使用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
答案 2 :(得分:1)
以下是我用于此类操作的一段代码。
Sub ClearBlank()
Dim i As Long
对于i = Range(“B65536”)。End(xlUp).Row To 8 Step -1
If IsEmpty(Cells(i,4))Then Rows(i).Delete接下来我
End Sub
我希望这有帮助!
答案 3 :(得分:0)
今天之前没有使用过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
一切顺利,
斯科特