• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 77
  • Last Modified:

Procedure going thru too many rows of data

In the following code, the MaxRow is huge and causes the process to run a while.  How would I edit the following procedure to instead of using MaxRow, to only run for 500 lines? or as long as there is data in column M?  The file that it is failing on in attached.  When running this procedure the MaxRow value gets huge, and should need to get that big.  This adds significant runtime.  Is there a way to fix this?

Sub DelOOETranslations() 'Assumes that oldest or OOE are first
Dim WS As Worksheet
Dim MaxRow As Long, I As Long
Dim ThisDate As Date
Set WS = ActiveSheet
MaxRow = LastRow
I = 6

Do
'---> Check for Cell if Date and Affect to ThisDate
    If Len(WS.Cells(I, "D")) = 20 And Mid(WS.Cells(I, "D"), 3, 1) = "/" Then
        ThisDate = DateValue(Left(WS.Cells(I, "D"), 10))
    End If
'---> Test if Date captured < now then delete or else increment counter go next line
    If ThisDate < DateValue(Now) Then
        WS.Cells(I, "A").EntireRow.Delete
        MaxRow = MaxRow - 1
    Else
        I = I + 1
    End If
Loop Until I > MaxRow

'---> Advise results to user
'MsgBox ("All date prior to " & DateValue(Now) & " have been deleted with their coresponding rows successfully.")
End Sub

Open in new window

Translation.xlsx
0
RWayneH
Asked:
RWayneH
2 Solutions
 
Rgonzo1971Commented:
Hi,

pls try (changed line 6)
Sub DelOOETranslations() 'Assumes that oldest or OOE are first
Dim WS As Worksheet
Dim MaxRow As Long, I As Long
Dim ThisDate As Date
Set WS = ActiveSheet
MaxRow = Range("A" & Cells.Rows.Count).End(xlUp).Row
I = 6

Do
'---> Check for Cell if Date and Affect to ThisDate
    If Len(WS.Cells(I, "D")) = 20 And Mid(WS.Cells(I, "D"), 3, 1) = "/" Then
        ThisDate = DateValue(Left(WS.Cells(I, "D"), 10))
    End If
'---> Test if Date captured < now then delete or else increment counter go next line
    If ThisDate < DateValue(Now) Then
        WS.Cells(I, "A").EntireRow.Delete
        MaxRow = MaxRow - 1
    Else
        I = I + 1
    End If
Loop Until I > MaxRow

'---> Advise results to user
'MsgBox ("All date prior to " & DateValue(Now) & " have been deleted with their coresponding rows successfully.")
End Sub

Open in new window

Regards
0
 
NorieCommented:
This will set MaxRow to be the last row in column M.
MaxRow = ActiveSheet.Range("M" & Rows.Count).End(xlUp).Row

Open in new window

0
 
RWayneHAuthor Commented:
Thanks, both worked.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now