繁体   English   中英

循环遍历所有工作表问题

[英]Looping through all worksheets issue

我有一个很长的宏,它的末尾有以下内容:

        On Error Resume Next

    For Each ws In ActiveWorkbook.Worksheets
        ws.Activate
        Do
        If Cells(iRow + 1, iCol) <> Cells(iRow, iCol) Then
            Cells(iRow + 1, iCol).EntireRow.Insert Shift:=xlDown
            iRow = iRow + 2
        Else
            iRow = iRow + 1
        End If
        Loop While Not Cells(iRow, iCol).Text = ""

        ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats

    Next ws

当 B 列发生变化时,这应该添加一个空白行(以分隔数据组),然后删除空白行上的格式。

这似乎没有正确循环所有工作表,因为只有第一张工作表在 B 列更改后更改为包含一个空白行。它也很慢。

我希望我能得到一些帮助,也许是更快的更好的解决方案?

预先感谢您的帮助。

当通过表循环,必须做出积极的参考范围时要添加的工作参考。 否则,任何范围引用都将引用ActiveSheet任何内容。

On Error Resume Next

For Each ws In ThisWorkbook.Worksheets
    With ws
        Do
            If .Cells(iRow + 1, iCol) <> .Cells(iRow, iCol) Then
                .Cells(iRow + 1, iCol).EntireRow.Insert Shift:=xlDown
                iRow = iRow + 2
            Else
                iRow = iRow + 1
            End If
        Loop While Not .Cells(iRow, iCol).Text = ""
        .UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats
    End With
Next ws

正如 jsheeran 评论的那样,您必须在循环的每个新工作表上初始化 iRow

一种方法是从 iCol 列中的最后一个非空单元格行向后循环到第二个单元格行,这也简化了代码:

For Each ws In ActiveWorkbook.Worksheets
    With ws
        For iRow = .Cells(.Rows.Count, iCol).End(xlUp) To 2 Step - 1
            If .Cells(iRow - 1, iCol) <> .Cells(iRow, iCol) Then .Cells(iRow, iCol).EntireRow.Insert Shift:=xlDown
        Next
        On Error Resume Next
        .UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats
        On Error GoTo 0
    End With
Next

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM