0

如果没有来自的数据,我正在尝试删除一行A:J

我找到了这段代码并试图编辑它,但这最终会删除整个工作表的数据。

任何帮助将不胜感激

 Sub DeleteRows()
    Dim rngBlanks As Range
    Dim i As Integer

    For i = 1 To 10
        On Error Resume Next
        Set rngBlanks = Columns(i).SpecialCells(xlCellTypeBlanks)
        On Error GoTo 0
        If Not rngBlanks Is Nothing Then
            rngBlanks.EntireRow.Delete
        End If
    Next
 End Sub
4

2 回答 2

1

如果 A:J 行中没有数据,则尝试删除一行

代码正在做的是单独检查列,而不是A:J标题所暗示的范围。因此,您的整个数据很有可能被删除。可以说A1有一些数据,但B1没有。所以你的代码将删除Row 1. 你需要做的是检查 sayA1:J1是否为空。

我想这就是你正在尝试的?

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim rngBlanks As Range
    Dim i As Long, lRow As Long, Ret As Long

    '~~> Set this to the relevant worksheet
    Set ws = ThisWorkbook.Sheets("Sheet2")

    With ws
        '~~> Get the last row in that sheet
        If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
            lRow = .Cells.Find(What:="*", _
                          After:=.Range("A1"), _
                          Lookat:=xlPart, _
                          LookIn:=xlFormulas, _
                          SearchOrder:=xlByRows, _
                          SearchDirection:=xlPrevious, _
                          MatchCase:=False).Row
        Else
            lRow = 1
        End If

        '~~> Loop through the rows to find which range is blank
        For i = 1 To lRow
            Ret = Application.Evaluate("=COUNTA(A" & i & ":J" & i & ")")
            If Ret = 0 Then
                If rngBlanks Is Nothing Then
                    Set rngBlanks = .Rows(i)
                Else
                    Set rngBlanks = Union(rngBlanks, .Rows(i))
                End If
            End If
        Next i
    End With

    '~~~> Delete the range
    If Not rngBlanks Is Nothing Then rngBlanks.Delete
End Sub

另一种方法是使用 Autofilter 删除这些范围

于 2013-10-05T09:25:00.843 回答
-1

我用一张在 A:J 列到第 15 行有一些非空白单元格的工作表逐步浏览了你的代码。第 16:18 行完全是空白的,D19=1。您想从 A:J 中删除每个单元格中都有空格的行。

在 For..Next 循环的第一次迭代中,rngBlanks 不是 Nothing,因为键入

?rngBlanks.address

返回 1 美元,5 美元:19 美元。A2:A4 不是空白的。当你执行

Set rngBlanks = Columns(i).SpecialCells(xlCellTypeBlanks)

它会在 A 列中查找不是您想要测试的任何空白。您想测试每一行,可能在您的 ActiveSheet.UsedRange 中查看列 A:J 是否全为空白。所以你需要定义一个变量

Dim Rw as Range

并遍历 UsedRange 中的每个 Rw

For Each Rw in ActiveSheet.UsedRange

If WorksheetFunction.CountBlank(range(cells(Rw,1),cells(Rw,10))) =0 Then

    Rw.EntireRow.Delete

我可以在这里发布整个代码,但我给出的内容应该会让你走上正轨。

于 2013-10-05T09:25:09.770 回答