2017-10-04 79 views
0

我有以下代码来搜索日期列表并删除任何与两年前的日期相关的行。当我跑步时,excel冻结。我是新来的VBA,并认为我可能有使用此特定循环有关的概念误区:对于下一个循环冻结

Sub DeletePriorDates() 
'Delete any dates before two years past 
    Dim twoyrpast As Date 
    Dim c As Range 
    Dim DataRange As Range 
    Set DataRange = Sheet6.Range("A:A") 
    twoyrpast = DateAdd("yyyy", -2, Sheet1.[B].Value) 

    For Each c In DataRange 
     If c < twoyrpast Then c.EntireRow.Delete 
    Next 

End Sub 

当我停止运行宏,调试器突出了“下一步”。我已经尝试了Next的不同迭代,并且在线代码看起来几乎完全相同。我找不到我做错了什么。

+6

当删除行建议向后运行循环即'对于i = 100:1个的步骤-1'您的问题作为你造成的通过将DataRange设置为整个列将其置于无限循环中 – Tom

+0

好的,这很好理解。我不熟悉,但现在我会查找它。感谢您的答复! @汤姆 – Kim

回答

5

而且我的评论上面给这个一去

Public Sub DeletePriorDates() 
'Delete any dates before two years past 
    Dim twoyrpast As Date 
    Dim i As Long 

    With Sheet6 
     twoyrpast = DateAdd("yyyy", -2, Sheet1.[B].Value) 

     For i = .Cells(.Rows.Count, "A").End(xlUp).Row To 1 Step -1 
      If .Cells(i, 1) < twoyrpast Then .Rows(i).EntireRow.Delete 
     Next i 
    End With 
End Sub