【问题标题】:Delete used range from every worksheet in workbook从工作簿中的每个工作表中删除使用的范围
【发布时间】:2020-02-13 11:25:33
【问题描述】:

我有这个测试数据集:

我在多张纸上都有它,但它总是不同的范围 - 更多的列,更多的行等。在这个“标题”下面总是有一些空白行。

我想遍历所有工作表并使用 End(xlDown) 和 End(xlToRight) 选择此标题。

我正在尝试使用以下代码:

    Sub WorksheetLoop()

    Dim ws As Worksheet
    Dim rng As Range

    For Each ws In ActiveWorkbook.Worksheets
        Set rng = Range("A1", Range("A1").End(xlDown).End(xlToRight))
            rng.Delete
    Next ws

End Sub

此宏会删除第一个工作表上的所有内容,而其他任何工作表上都不会发生任何事情。

我尝试使用 ws.rng,但随后出现对象错误。

你能告诉我我做错了什么吗?

我正在研究一些 VBA 材料并尝试进行更改,但我总是以错误告终。

谢谢

【问题讨论】:

  • Set rng = ws.Range("A1", ws.Range("A1").End(xlDown).End(xlToRight)) 或更简洁的是Set rng = ws.Range("A1").currentregion
  • 哦,哇,为什么解决方案总是那么简单:(我在第一个范围而不是第二个之前添加前缀。所以我总是需要将工作表引用放在语句中的每个范围前面。另一个记下了,谢谢:)
  • @Raymond_90 - 这是 With ws...End With 块的一个很好的用例。
  • 您这样做,不这样做是这里提出问题的常见原因,因此您处于领先地位。
  • @BigBen 谢谢你,我会调查的,SJR 再次谢谢你,我能以某种方式将你的评论标记为解决方案吗?

标签: excel vba


【解决方案1】:

这个错误很常见。

您必须为Range(和Cells)的每个实例添加一个工作表引用,否则您的范围可能跨越两个工作表(指定的工作表和活动工作表,这是在没有其他任何内容的情况下暗示的) ,这会导致错误。

Set rng = ws.Range("A1", ws.Range("A1").End(xlDown).End(xlToRight))

在这种特殊情况下,您也可以考虑这种变化:

Set rng = ws.Range("A1").currentregion

CurrentRegion.

【讨论】:

    猜你喜欢
    • 2018-08-29
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2019-07-29
    • 2016-10-10
    相关资源
    最近更新 更多