删除已过滤表中的行

时间:2014-05-11 21:45:12

标签: vba excel-2007 delete-row

我在Excel中有一个表,它被过滤以仅显示某些数据,然后我需要逐行手动评估这些数据,以查看是否应该保留或删除它。

我在下面有一个宏来删除一行(通过按 Ctrl + d 激活),这在非过滤表上正常工作,但是当应用过滤器时我收到此错误 -

  

无法在过滤范围或表格中移动单元格

任何人都可以帮我修改宏,以便它可以使用过滤表吗?

Sub deleteTableRow()

    Dim rng As Range

    On Error Resume Next
    With Selection.Cells(1)
        Set rng = Intersect(.EntireRow, ActiveCell.ListObject.DataBodyRange)
        On Error GoTo 0
        If rng Is Nothing Then
            MsgBox "Please select a valid table cell.", vbCritical
        Else
            rng.Delete xlShiftUp
        End If
    End With

End Sub

3 个答案:

答案 0 :(得分:1)

好的,我明白了。

我不知道为什么,但从Shift方法中移除Delete参数有效。它最初显示一个提示,要求我确认删除,但在删除工作之前将DisplayAlerts设置为false(当然,之后又返回true)。

Sub deleteTableRow()

    Dim row As Range    ' The table row to delete

    On Error Resume Next
    With Selection.Cells(1)
        Set row = Intersect(.EntireRow, ActiveCell.ListObject.DataBodyRange)
        On Error GoTo 0
        If row Is Nothing Then
            MsgBox "Please select a valid table cell.", vbCritical
        Else
            Application.DisplayAlerts = False
            row.Delete
            Application.DisplayAlerts = True
        End If
    End With

End Sub

答案 1 :(得分:0)

错误消息非常明确:您无法在已过滤的表格中执行此操作。

row.EntireRow.Delete应该工作:)

答案 2 :(得分:0)

只是为了将来 - 当您在过滤视图中隐藏某些列时,这是正常错误。 删除整行是有效的,但并不总是建议(例如,当您的工作表中有多个表时)