Run macro if Workbook_Open() criteria is met

I want to run my procedure of moving row data to another worksheet. I have that but I want it to run automatically when the spreadsheet opens. If Column B date is 7 days ago from today's i want it to run my macro (TransferPrints) . For example if today is 06/05/2013 and column B has a date of  05/20/2013 (Subtract only weekdays), it would run, if it is 6/01/2013 it would not run my macro for that particular row.

I tried adding the following procedure to the workbook page but I'm having all my data in Column B removed instead of filtering and selecting only days that are greater than 7 days from today

Private Sub Workbook_Open()
    On Error Resume Next
    If (Application.WorksheetFunction.Weekday(Format(Now(), "m/d/yyyy") > 7)) Then
            If (Format(Now(), "m,d,yyyy") = Sheets("Print").Range("B:B").Value) Then
     'If (WorksheetFunction.WorkDay(Sheets("Print").Range("B:B"), -7)) Then
        End If
    End If
End Sub
Who is Participating?
Robberbaron (robr)Connect With a Mentor Commented:
to determine the number of WeekDays is not simple but has been done before.
Function fctnNetWorkDays(datFrom As Date, datTo As Date, Optional booIncEnd As Boolean = False) As Long
    'Code sample from Accessory
    Dim lngDiff As Long, booFWD As Boolean, booTWD As Boolean, bytF As Byte, bytT As Byte
    If booIncEnd Then datTo = datTo + 1
    lngDiff = DateDiff("d", datFrom, datTo, 0)
    bytF = WeekDay(datFrom, 0)
    bytT = WeekDay(datTo, 0)
    booFWD = (bytF < 6)
    booTWD = (bytT < 6)
    If booFWD And booTWD Then
        fctnNetWorkDays = (Int(lngDiff \ 7) * 5) + lngDiff Mod 7
        If bytF > bytT Then fctnNetWorkDays = fctnNetWorkDays - 2
    ElseIf Not booFWD And booTWD Then
        fctnNetWorkDays = (Int(lngDiff \ 7) * 5) + (lngDiff Mod 7) + bytF - 8
    ElseIf booFWD And Not booTWD Then
        fctnNetWorkDays = (Int(lngDiff \ 7) * 5) + (lngDiff Mod 7) - bytT + 6
        fctnNetWorkDays = (Int(lngDiff \ 7) * 5) + (lngDiff Mod 7) + (bytF <> bytT)
    End If

End Function

Open in new window

Robberbaron (robr)Commented:
Not sure how your TransferPrints function works but the formula  .Range("B:B").  selects the entire column as a whole, and doesnt check each individual cell.

something like this may work....

dim cellX as range
for each cellX in Sheets("Print").Range("B:B")
    if now() - cellX >7 then
          TransferPrints cellX  ''does Transfer prints use the ActiveCell ??
next cellX

Open in new window

can you post parts of a sample workbook for us to test against ?
I'm amazed that anything works at all.

This code:
 If (Application.WorksheetFunction.Weekday(Format(Now(), "m/d/yyyy") > 7)) Then

Open in new window

Should always be false since the Weekday function returns a number from 1-7, which will never be > 7.

In addition, there is no reason to format the value unless you want to see it differently in the debugger.

And the "Application.WorksheetFunction" part is optional.

So what I think you're looking for is something closer to what robberbaron posted.  Ultimately, if you want to check more than one cell, you either need to use a function that supports ranges (of which neither Format nor Now do in your second If) or you need to use some kind of loop (like robberbaron's For Each)
And as indicated, the problem may be in other parts of the code.
Southern_GentlemanAuthor Commented:
Thanks Roberbarron, good stuff.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.