[英]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.