【问题标题】:VBA coding to identify and clear data in a specific tableVBA 编码以识别和清除特定表中的数据
【发布时间】:2018-09-20 23:23:43
【问题描述】:

我是使用 VBA 的新手,我想向一个按钮添加编码,该按钮将识别名为“QA_Activity”的表的大小,并在单击按钮时清除除标题行之外的所有内容。我希望这会很简单,但我正在努力如何识别每个月可能不同大小的表格。非常感谢。

【问题讨论】:

标签: excel vba


【解决方案1】:

表在 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。或者更高级的东西。

【讨论】:

    【解决方案2】:

    首先,创建一个命名范围。如果需要,您可以使其动态化。在本例中,命名范围是名称“数据”。

    然后从下面的 VBA 代码中触发子“测试”。

    Option Explicit
    
    Sub ClearRange(ByVal rngCell As Range)
    
        Dim rngRange As Range
    
        Set rngRange = rngCell.CurrentRegion
    
        rngRange.Range(rngRange.Parent.Cells(2, 1), rngRange.Parent.Cells(rngRange.Rows.Count, rngRange.Columns.Count)).ClearContents
    
    End Sub
    
    Sub test()
    
        Dim rngCell As Range
    
        Set rngCell = ActiveSheet.Range("Data").Cells(1, 1)
    
        ClearRange rngCell
    
    End Sub
    

    这应该清除除第一行(标题)之外的范围。

    重要提示:您的区域的标题行和第一列必须完全填充(没有空单元格)才能顺利进行上述操作。

    【讨论】:

    • 我没有放置它,但看看你的代码,我认为它不像它可能的那样简单或健壮。如果 OP 不希望清除的其他数据恰好立即加入表中,并且 Tables aka ListObjects 具有更简洁的内置属性和方法,则使用 .CurrentRegion 可能会出现问题。
    • 除了 jeffreyweir 提到的问题之外:由于 table/ListObject 名称实际上是 NameManager 中列出的命名范围,它会随表格自动调整大小,因此为数据定义另一个名称似乎是非常多余的。您可以只使用更安全且没有冗余的表的名称。有关该主题的精彩指南,请参阅 The VBA Guide To ListObject Excel Tables。只有您可以像以前那样做的事实并不意味着这自动成为一个好的答案/想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多