Vba 用于下一个循环冻结

Vba 用于下一个循环冻结,vba,excel,Vba,Excel,我有以下代码来搜索日期列表并删除与两年前的日期相关联的任何行。当我运行时,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:

我有以下代码来搜索日期列表并删除与两年前的日期相关联的任何行。当我运行时,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
Sub-DeletePriorDates()
'删除两年前的任何日期
模糊的两年过去日期
调光范围
变暗数据范围作为范围
设置数据范围=表6.范围(“A:A”)
TwoyRpass=DateAdd(“yyy”,-2,第1页[B]。值)
对于数据范围中的每个c
如果c<2年过去,则c.EntireRow.Delete
下一个
端接头

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

关于我上面的评论,请试一试

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
Public子目录DeletePriorDates()
'删除两年前的任何日期
模糊的两年过去日期
我想我会坚持多久
附页6
TwoyRpass=DateAdd(“yyy”,-2,第1页[B]。值)
对于i=.Cells(.Rows.Count,“A”).End(xlUp)。行到1步骤-1
如果.Cells(i,1)<2年过去,则.Rows(i).EntireRow.Delete
接下来我
以
端接头

关于我上面的评论,请试一试

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
Public子目录DeletePriorDates()
'删除两年前的任何日期
模糊的两年过去日期
我想我会坚持多久
附页6
TwoyRpass=DateAdd(“yyy”,-2,第1页[B]。值)
对于i=.Cells(.Rows.Count,“A”).End(xlUp)。行到1步骤-1
如果.Cells(i,1)<2年过去,则.Rows(i).EntireRow.Delete
接下来我
以
端接头

删除行时,建议向后运行循环,即i=100到1步-1的循环。将数据范围设置为整列,将其放入无限循环时会导致问题确定,这很好。我不熟悉,但我现在要查一下。谢谢你的回复@Tom删除行时,建议向后运行循环,即i=100到1步-1的
问题是由于您将数据范围设置为整列,从而将其放入无限循环中造成的。好的,知道这一点很好。我不熟悉,但我现在要查一下。谢谢你的回复@汤姆