从Excel表中删除所有数据行(除了第一个)

Dav*_*ard 14 excel vba excel-2007 excel-vba

就在最近,我一直试图删除表中的所有数据行,除了第一行(需要清除)

正在执行的某些表可能已经没有行,所以我将其运行到问题,因为.DataBodyRange.Rows.Count在没有行的表上使用(只是页眉和/或页脚)会导致错误.

我全神贯注地寻找一个找不到整个解决方案的解决方案,所以我希望我对这个问题的回答将来对其他人有用.

小智 21

这是我清除数据的方式:

Sub Macro3()
    With Sheet1.ListObjects("Table1")
        If Not .DataBodyRange Is Nothing Then
            .DataBodyRange.Delete
        End If
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

  • 这里的大多数答案都假设您的表格位于当前工作表上,或者您知道工作表名称.为了清除一个没有引用工作表的命名表,我将`With Sheet1.ListObjects("Table1")`行更改为`With Range("Table1").ListObject` (3认同)

Sid*_*out 19

您的代码可以缩小到

Sub DeleteTableRows(ByRef Table As ListObject)
    On Error Resume Next
    '~~> Clear Header Row `IF` it exists
    Table.DataBodyRange.Rows(1).ClearContents
    '~~> Delete all the other rows `IF `they exist
    Table.DataBodyRange.Offset(1, 0).Resize(Table.DataBodyRange.Rows.Count - 1, _
    Table.DataBodyRange.Columns.Count).Rows.Delete
    On Error GoTo 0
End Sub
Run Code Online (Sandbox Code Playgroud)

编辑:

另外,如果我需要告知用户第一行或其他行是否被删除,我会添加正确的错误处理


小智 9

我有 3 个可以正常工作的例程,只需在表中选择一个单元格并运行其中一个子例程

Sub ClearTable()
If Not ActiveCell.ListObject Is Nothing Then
    ActiveCell.ListObject.DataBodyRange.Rows.ClearContents
End If
End Sub
Run Code Online (Sandbox Code Playgroud)

和收缩表以删除除标题和第一个数据行之外的数据体范围

Sub ShrinkTable()
If Not ActiveCell.ListObject Is Nothing Then
    ActiveCell.ListObject.DataBodyRange.Delete
End If
End Sub
Run Code Online (Sandbox Code Playgroud)

和删除表格以从工作表中完全删除表格

Sub DeleteTable()
If Not ActiveCell.ListObject Is Nothing Then
    ActiveCell.ListObject.Delete
End If
End Sub
Run Code Online (Sandbox Code Playgroud)