基于变量日期删除行

时间:2016-06-27 22:09:39

标签: vba excel-vba excel

我找到了另一个链,它导致我根据它们包含的静态文本删除单元格,但现在另外我需要以类似的方式删除日期,但它们是可变的。

这是我用于静态文本删除的代码:

'Sub DeleteRowBasedOnCriteria()
Dim RowToTest As Long

For RowToTest = Cells(Rows.count, 6).End(xlUp).Row To 2 Step -1

With Cells(RowToTest, 6)
    If .value <> "ALLOW" _
        And .value <> "CHRG" _
        And .value <> "COST" _
    Then _
    Rows(RowToTest).EntireRow.Delete
End With

Next RowToTest

End Sub

这很有效,但是当我运行此报告时,我会在之前的2或3天内运行它(取决于星期几)。我需要删除在最早的运行日期之前两天之前的任何内容。例如:如果我在24日和22日运行报告,我想删除早于20日的任何内容。

我知道似乎可以运行这样的报告,但是相信我,它就像T-Rex正在进行后退一样无能为力。我试图改变静态文本的代码,但由于对VBA代码的了解有限,我不知道我是否走在正确的轨道上:

'Sub DeleteRowBasedOnCriteria()
Dim RowToTest As Long

For RowToTest = Cells(Rows.count, 5).End(x1Up).Row To 2 Step -1

With Cells(RowToTest, 5)
    If .value < Today _
    Then _
    Rows(RowToTest).EntireRow.Delete
End With

Next RowToTest

End Sub

显然,我没有任何东西可以说明今天的日期减去报告运行前4天的价值,所以我也需要帮助。在当前形式中,我得到了“应用程序定义的或对象定义的错误”:

For RowToTest = Cells(Rows.count, 5).End(x1Up).Row To 2 Step -1

提前感谢任何帮助或想法。

1 个答案:

答案 0 :(得分:1)

已编辑:已添加InputBox

使用日期而不是今天。 Rows()。删除时不需要EntireRow。

Sub M1()     'Sub DeleteRowBasedOnCriteria()     昏暗的RowToTest一样长     Dim DayCount As Long

DayCount = Application.InputBox(Prompt:="How Days Back to CleanUp?", Default:=3, Type:=1)

For RowToTest = Cells(Rows.Count, 6).End(xlUp).Row To 2 Step -1

    With Cells(RowToTest, 6)
        If .Value <> "ALLOW" _
           And .Value <> "CHRG" _
           And .Value <> "COST" _
           Then _
           Rows(RowToTest).Delete
    End With

Next RowToTest

For RowToTest = Cells(Rows.Count, 5).End(xlUp).Row To 2 Step -1

    With Cells(RowToTest, 5)
        If .Value < (Date - DayCount) Then Rows(RowToTest).Delete
    End With

Next RowToTest

End Sub

相关问题