表在 VBA 中称为 ListObjects。 ListObject 有一个名为 .DataBodyRange 的属性,其中包含标题下的所有内容。那有一个 .Clear 方法。
我通常使用这种语法来清除 ListObject 的主体:
Range("Table1").ListObject.DataBodyRange.Clear
Range("Table1") 位允许我找到 ListObject,即使我不知道它在哪个工作表上。这是因为表是也是命名范围,您可以按名称寻址。因此,您只需说“转到名为 Table1 的命名范围,然后将那里的 ListObject 给我”。否则,您需要提前知道 ListObject 在哪个工作表上,并使用以下内容:
Worksheets("SomeSheet").Listobjects("Table1").DataBodyRange.Clear
...直到有一天您将表格移动到另一张工作表并忘记更新代码之前,它都可以正常工作。
请注意,不能保证表实际上具有 .DataBodyRange,因为有人可能已经删除了表头下的所有行。例如,拿这个表:
DataBodyRange 中有多少行?
? Range("Table1").ListObject.DataBodyRange.Rows.Count
3
好的,现在我要删除这些行:
...离开这个:
DataBodyRange 现在有多少行?
? Range("Table1").ListObject.DataBodyRange.Rows.Count
哎呀...如果 .DataBodyRange 不存在,您将无法引用它。
为了安全起见,在尝试引用 .DataBodyRange 之前粘贴 On Error Resume Next,然后粘贴 On Error Goto 0。或者更高级的东西。