Option Explicit
Sub InsertBlankRow()
Dim rowCount As Long
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
rowCount = 2
With ws
Do Until IsEmpty(Cells(rowCount + 1, "D"))
If (Cells(rowCount, "D") <> Cells(rowCount + 1, "D")) Then
Range(Cells(rowCount + 1, "D"), Cells(rowCount + 2, "D")).EntireRow.Insert Shift:=xlDown
rowCount = rowCount + 3
Else
rowCount = rowCount + 1
End If
Loop
End With
Next ws
End Sub
谢谢大家的回复。使用ws.Cells和ws.Rows导致Do Until语句不起作用。一旦我删除了ws。行可以添加。但它仍然不会遍历所有工作表。
编辑代码以提供我目前正在使用的内容。
答案 0 :(得分:0)
你正在增加第一张表中的行数,我猜你的下一张表没有比第一张表更多的行。请将您的 rowCount
移到 For Each Loop
中,如下所示:
'rowCount = 2 'set to start row 'REMOVE FROM HERE
For Each ws In ThisWorkbook.Worksheets
rowCount = 2 'set to start row
Do Until IsEmpty(Cells(rowCount + 1, "D"))
因此,每个工作表行都将从2开始。还包含评论中建议的所有更改。
答案 1 :(得分:0)
跟踪Scott ^ 2(Holtzman和Craner),你需要引用For Each
循环中的所有对象。我更喜欢使用With ws
,它会清理并简化您的代码,嵌套在With
语句中的所有对象都有.
作为前缀(.Cells(rowCount, "D")
和.Rows(rowCount + 1).Insert Shift:=xlDown
)
此外,在插入两行之前无需选择行(总是更好以避免使用Select
和Selection
),您可以直接使用.Rows(rowCount + 1).Insert Shift:=xlDown
。
完整&#34;清洁&#34;代码强>
Option Explicit
Sub InsertBlankRow()
Dim rowCount As Long
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
rowCount = 2 'set to start row
With ws
Do Until IsEmpty(.Cells(rowCount + 1, "D"))
If .Cells(rowCount, "D") <> .Cells(rowCount + 1, "D") Then
.Rows(rowCount + 1).Insert Shift:=xlDown
.Rows(rowCount + 1).Insert Shift:=xlDown
rowCount = rowCount + 3
Else
rowCount = rowCount + 1
End If
Loop
End With
Next ws
End Sub
额外:如果要在D列中的不同值之间插入2行代码,请使用下面的代码行:
.Range(.Cells(rowCount + 1, "D"), .Cells(rowCount + 2, "D")).EntireRow.Insert Shift:=xlDown