Okay, no problem. You will need a holiday table. Here is a function that
returns a date in the future or past that excludes Saturdays, Sundays, and
any date in the holiday table. Put it in a standard module and change the
control source of your code:
=AddWorkDays(txtSettlemetDate, 3)
Note, if you have a holiday table, change the table and field name in this
code. If not, you can create one using any names you like as long as they
match. My table has an additional field to store the name of the holiday,
but that isn't important for this function:
'---------------------------------------------------------------------------------------
' Procedure : AddWorkDays
' DateTime : 5/8/2006 14:24
' Author : Dave Hargis
' Purpose : Determines the date of a work day (mon-fri) a number of days
after or
' : before a given date.
' Arguments : OriginalDate The date you want to add or subtract from to
determine a
' : worday
' : DaysToAdd Either a positive or negative number of working
days
' : Saturdays and Sundays are not counted
' : Holidays can also be omitted using a holiday table. The table
should
' : Contain one row for each holiday. As written, the table is
named
' : tblHolidays and the field used is a Date field named Holidate
' : No time vaule should be in the Holidate field. Time values
may produce
' : Incorrect Results
'---------------------------------------------------------------------------------------
'
Public Function AddWorkDays(OriginalDate As Date, DaysToAdd As Long) As Date
Dim lngAdd As Long
Dim lngDayCount As Long
Dim lngHolidayCount As Long
On Error GoTo AddWorkDays_Error
If DaysToAdd < 0 Then
lngAdd = -1
Else
lngAdd = 1
End If
AddWorkDays = OriginalDate
Do Until lngDayCount = DaysToAdd
AddWorkDays = DateAdd("d", lngAdd, AddWorkDays)
If Weekday(AddWorkDays, vbMonday) < 6 Then
If IsNull(DLookup("[holidate]", "tblHolidays", "[holidate] = #"
& _
AddWorkDays & "#")) Then
lngDayCount = lngDayCount + lngAdd
End If
End If
Loop
AddWorkDays_Exit:
On Error GoTo 0
Exit Function
AddWorkDays_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & _
") in procedure AddWorkDays of Module modDateFunctions"
GoTo AddWorkDays_Exit
End Function
--
Dave Hargis, Microsoft Access MVP
Andre Adams said:
Absolutely not. I would not want to store this in a table. Thanks for the
formula. Will the 3 days include weekends and holidays as well? I would
need it to just show business days.
:
Do you mean a control on a form that would be 3 days greater than the
settlement date stored in the table? If so, create a text box on your form
and use the Control Source property to calculate that:
=DateAdd("d", 3, txtSettlementDate)
Certianly you don't mean add a field to your table to store a calculated
value. I am really sure you don't want to violate database normalization
rules by storing a calculated value.
--
Dave Hargis, Microsoft Access MVP
:
Hey guys,
I'm creating a query that needs to be run off of Trade Date. However, all
of my data is put into the database under Settlement date (Trade Date + 3
days). How can I tell the database to add 3 days to all of the items that
populate, thus creating another field called Trade Date?