【问题标题】:Excel VBA - Delete table (including header and first row)Excel VBA - 删除表格(包括标题和第一行)
【发布时间】:2017-12-14 21:47:11
【问题描述】:

我想从 Excel 中删除一个表格,包括标题、第一行和总计。

我将表名定义为字符串 (TableName)。

我找到了

Range(TableName).Delete

将删除 DataBodyrange 但保留标题和第一行。和

Range(TableName).ListObject.Delete

将删除整个表格,但留下空白。

我需要什么代码来删除整个表格并且不留空格?

【问题讨论】:

  • 当您说“空白空间”时,您的意思是它只是不删除工作簿的整个行并将其余行向上移动?
  • 是的。如果该表有 5 行,则删除该表后会留下 6 个空行。
  • 这是防止数据丢失应该做的。想象一下,您有 2 个彼此相邻的表,您不希望删除一个表会自动删除包含第二个表数据的所有行,对吗?
  • 明白。在这种情况下,表格的右侧没有任何内容。我真的很想删除表格的所有行并把其他所有东西都拿出来。

标签: excel vba


【解决方案1】:

你可以单独做(事实上,据我所知,你必须这样做)。在我的示例中,您不知道表格的位置,但如果您知道起始单元格,那么显然您可以输入一个常量来代替 firstrow 和 firstcol。

Sub deltable()
Dim lastrow As Long
Dim firstrow As Long
Dim firstcol As Long
Dim lastcol As Long
Dim mytable As ListObject

    Set mytable = Sheets("Sheet1").ListObjects("Table3")

    firstrow = mytable.ListRows(1).Range.Row - 1
    lastrow = mytable.ListRows.Count + firstrow + 1
    firstcol = mytable.ListColumns(1).Range.Column - 1
    lastcol = mytable.ListRows.Count + firstcol + 1

    mytable.Unlist

    Sheets("Sheet1").Range(Cells(firstrow, firstcol), Cells(lastrow, lastcol)).Delete shift:=xlUp

End Sub

【讨论】:

  • 不错的方法,但这可以大大简化。摆脱所有Long 值,而是设置一个范围:Set delRange = mytable.Range。像往常一样将其取消列出,然后将 .Delete 之前的所有内容替换为您设置的范围。它的工作原理完全相同,但更容易阅读。
  • 非常感谢你们俩。一个很好的方法,最后非常简单; Set mytable = Sheets("Sheet1").ListObjects("Table3") Set delRange = mytable.Range mytable.Unlist delRange.Delete
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 2017-06-20
相关资源
最近更新 更多