2016-06-27 1 views
2

정적 인 텍스트를 기반으로 셀을 삭제하는 다른 체인을 발견했습니다. 그러나 비슷한 방식으로 날짜를 삭제해야하지만 변수가 다릅니다. 행을 변수 날짜를 기준으로 삭제합니다.

내가 정적 텍스트 제거를 위해 사용하고있는 코드입니다 :

'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 일 동안 실행 그 주). 가장 빠른 실행 날짜 2 일 전의 항목을 삭제해야합니다. 예 : 22 일과 23 일에 24 일에 보고서를 실행하면 20 일 이전의 날짜는 삭제하고 싶습니다.

보고서를 실행하는 것처럼 보일 수 있지만 T-Rex가 백 플립 (back-flip)을 할 때 불가능하다는 점을 믿어 의심치 않습니다. 난 그냥 정적 텍스트에 대한 코드를 변경 시도,하지만 난 바른 길에 나는 경우 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 

감사합니다.

+4

'x1Up'는 xlUp''과 동일하지 않습니다! –

+2

'If .value <(Today - 4) Then'은 실행 날짜 이전의 4 일을 확인합니다. –

답변

1

편집 :에서 InputBox는

사용 날짜 대신 오늘을 추가했다. 행(), 삭제시 EntireRow는 필요하지 않습니다.

하위 M1() '하위 DeleteRowBasedOnCriteria() 희미한 RowToTest만큼 희미한 DAYCOUNT만큼

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 

최종 하위는

+0

@ TKE-439 If 문이 올바른 방식으로 작성되었습니다. 당신의 방법은 사실 내 방식보다 효율적입니다. –

+0

이제 완벽하게 작동합니다. 이 질문을하겠습니다. 보통 나는 지난 이틀 동안 보고서를 실행합니다 (29 일에는 27 일 - 28 일까지 실행합니다). 이를 위해 클린업 매크로는 완벽하게 작동하지만, 하루 늦게 실행해야한다면 (27 일 ~ 28 일 30 일에 실행). 이 경우 If.Value <(Date - 3) Then 행 (RowsToTest) .Delete 은 계산이 현재 날짜를 기반으로하기 때문에 여전히 필요한 요일을 삭제합니다. 어떤 아이디어? –

+0

@ TKE-439 당신을 위해 InputBox를 추가했습니다. –