我找到了另一个链,它导致我根据它们包含的静态文本删除单元格,但现在另外我需要以类似的方式删除日期,但它们是可变的。
这是我用于静态文本删除的代码:
'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
提前感谢任何帮助或想法。
答案 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