【问题标题】:VBA code won't iterate through worksheets to delete defined rowsVBA 代码不会遍历工作表以删除定义的行
【发布时间】:2020-03-05 19:49:07
【问题描述】:

我的工作簿中有 100 个工作表。在每个工作表中,第一行都有空白行。对于某些工作表,第 8 行是数据的开始位置。对于某些工作表,数据从 9 日或 10 日开始。

我的代码转到具有值的第一行,然后向上偏移一行。然后我需要它删除。

我的代码在一张工作表上工作得很好,但是当我尝试遍历工作簿中的所有工作表时,它并没有超出活动工作表。

我可以做些什么来遍历工作表?

Sub To_Delete_Rows_In_Range()
Dim iCntr
Dim rng As Range
Dim wb As Workbook
Set wb = ActiveWorkbook

For Each Ws In wb.Worksheets
    Set rng = Range("A1", Range("A1").End(xlDown).Offset(-1, 0))
    For iCntr = rng.Row + rng.Rows.Count - 1 To rng.Row Step -1
        Rows(iCntr).EntireRow.Delete
    Next
Next Ws

End Sub 

【问题讨论】:

  • 您需要限定您的范围:Ws.Range("A1"... 而不是 Range("A1"...
  • 为什么要循环删除?只需删除整个范围。
  • 还有Ws.Rows(iCntr).EntireRow.Delete...
  • @BigBen 我做了rng.EntireRow.Delete 它删除了我需要的内容,但是当它进入第二个循环时,它给出了一个错误。 “Range 类的删除方法失败。”
  • 你不应该完全摆脱第二个循环吗?

标签: excel vba


【解决方案1】:

添加了 Ws。在你的范围前面,所以它知道随着工作表而改变。

Sub To_Delete_Rows_In_Range()
Dim iCntr
Dim rng As Range
Dim wb As Workbook
Set wb = ActiveWorkbook

For Each Ws In wb.Worksheets
    Set rng = Ws.Range("A1", Ws.Range("A1").End(xlDown).Offset(-1, 0))
    For iCntr = rng.Row + rng.Rows.Count - 1 To rng.Row Step -1
        Ws.Rows(iCntr).EntireRow.Delete
    Next
Next Ws

End Sub 

【讨论】:

  • 这段代码不起作用,它在初始范围之后继续删除行。它没有转到其他工作表。
  • 我错过了添加 Ws。到你的行。立即尝试。
  • 现在显示“删除范围类的方法失败”
  • Nvm 成功了。它给了我错误,因为某些工作表受到保护。
【解决方案2】:

尝试不同的方法,一遍又一遍地删除第一行,直到A1的内容为空白:

Do Until Ws.Range("A1").Value <> vbNullString
    Ws.Rows(1).Delete
Loop

【讨论】:

    猜你喜欢
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2015-03-11
    • 1970-01-01
    相关资源
    最近更新 更多