以下代码确定行中的单元格是否包含单词“Done”。如果是,则将该行复制到另一个标有“Log”的表格并从列表中删除。 为什么以下循环可能会跳过标记为“完成”的某些行?
Sub LogAndDelete()
Dim r As Integer
Dim Emptyrow As Integer
r = 1
For r = 5 To 70
If Cells(r, 15) = "Done" Then
'copying the row marked "Done"
rng = Range(Cells(r, 1), Cells(r, 7))
'determining the next empty row on log sheet
Emptyrow = _
Application.WorksheetFunction.CountA(Worksheets("Log").Range("A:A")) + 1
'Pasting onto log sheet
Range(Worksheets("Log").Cells(Emptyrow, 2), Worksheets("Log").Cells(Emptyrow, 8)) _
= rng
'Adding the date removed from log sheet in column A
Worksheets("Log").Cells(Emptyrow, 1) = Date
'Removing row marked "done" from list
Range(Cells(r, 1), Cells(r, 10)).ClearContents
Else
r = r + 1
End If
Next
End Sub
提前感谢您的帮助!
答案 0 :(得分:6)
问题在于你的其他情况。你已经通过进入else块忽略了那一行。并且你的循环代码负责递增。所以你的代码基本上是
If Cells(r, 15) = "Done" Then
'process done row
Else
'skip two rows.
End If
我认为你应该省略你的else块并让循环结构迭代r。
'remove this part
Else
r = r + 1
答案 1 :(得分:1)
我想知道在For循环中增加i可能是个问题。虽然没有测试过。
注释掉以下行和测试。
i = i + 1