0

我想我需要一个循环功能,但我不知道该怎么做。

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

这是我的代码:

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

有任何想法吗?

4

4 回答 4

3

on error resume next就在你的Delete线路之前怎么样?像这样:

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

我假设您不在乎它是否失败,因此无需进行错误捕获。如果您对 的调用没有返回任何单元格,这将阻止显示错误消息SpecialCells

于 2012-12-06T18:04:25.307 回答
2

虽然 Daniel Cook 是对的,但您可以使用On Error Resume Next,这是另一种解决方法,因为 usingOn 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
于 2012-12-06T18:26:55.343 回答
1

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

子清除空白()

暗淡我只要

For i = Range("B65536").End(xlUp).Row To 8 Step -1
If IsEmpty(Cells(i, 4)) Then Rows(i).Delete

接下来我

结束子

我希望这有帮助!

于 2012-12-06T19:23:14.780 回答
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

祝一切顺利,

斯科特

于 2013-01-17T21:39:57.043 回答