【问题标题】:Resize table using Listobjects not working使用 Listobjects 调整表格大小不起作用
【发布时间】:2021-10-25 00:27:57
【问题描述】:

我在工作表 2 中有一个名为“MyTable”的表。该表的行数每次都会根据数据而变化。我想清除表格的内容并使用宏调整它的大小,使其只有两行——一个标题行和一个空行。

表格标题行从 B5 到 K5。

我尝试了下面的代码,它清除了表格内容并调整了大小,但是并没有根据需要调整大小。它调整大小,但不清除 C 列中的表格边框。

非常感谢任何帮助。

Sub Table_Resize()

Dim rng as Range 

Sheet2.Select
Range("MyTable").ClearContents
        
Set rng = Range("MyTable[#All]").Resize(2, 10)
Sheet2.ListObjects("MyTable").Resize rng

End Sub

【问题讨论】:

  • 请分享一个简单的Sheet2.ListObjects("MyTable").DataBodyRange.Delete 有什么问题?
  • @VBasic2008,我试过了,得到了错误“下标超出范围”。
  • Subscript out of range 如果您的表格不在代号 Sheet2 的工作表上,则会发生。参考正确的工作表,它将起作用 - 提供 DatabodyRange 有数据,否则它将抛出 Object Variable or With block variable not set.... 所以首先检查 DatabodyRange 不是什么都没有。
  • 绝对是listobject类型的表吗?很难说,因为您选择了最后一个单元格,所以看不到表格句柄。 You have the Table Design ribbon when a cell in the table is selected?
  • @DarrenBartrup-Cook,感谢您帮助我。我正在尝试多种选择。显然桌子本身有问题。我在一张新表中重新整理了整个表格,它似乎工作正常。我使用的宏代码没有问题。

标签: excel vba resize datacolumn


【解决方案1】:

我认为您要做的是删除所有行。

Sub Table_ClearContents_Resize()
    Dim ws As Worksheet: Set ws = Sheets("Sheet2")
    Dim ol As ListObject: Set ol = ws.ListObjects("MyTable")
    
    ' Delete table contents
    ol.DataBodyRange.ClearContents
    
    ' Resize table
    ol.Resize Range(ol.HeaderRowRange.Resize(2).Address)
End Sub

【讨论】:

  • 旁注:Set ol = Nothing 不是必需的。
  • @BigBen,我只是把它放在那里,因为变量是本地的并且可以节省资源。如果它是全球性的,我不会这样做。为什么说没必要?
  • @ElioFernandes,感谢您花时间查看我的问题。我不想删除这些行,因为在该表下方有一些始终存在的内容。该内容和表格进入电子邮件。我有一个不同的宏。所以我只是想清除表格内容并调整表格大小。
  • @Seema。您可以在清除表格内容并调整大小后发布一张图片吗?
  • @Seema。如果您需要添加或删除新列,您的代码虽然不是动态的,但仍然有效。试试我刚刚更新的代码。尝试运行它删除或添加列。
猜你喜欢
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多