' basAccountingYear
Option Compare Database
Option Explicit
Public Function AcctYear(MonthStart As Integer, DayStart As Integer, Optional DateVal As Variant) As String
Dim dtmYearStart As Date
If IsMissing(DateVal) Or IsNull(DateVal) Then DateVal = VBA.Date
If MonthStart = 1 And DayStart = 1 Then
' accounting year is calendar year, so return single year value
AcctYear = Year(DateVal)
Else
' get start of accounting year in year of date value
dtmYearStart = DateSerial(Year(DateVal), MonthStart, DayStart)
' if date value is before start of accounting year
' accounting year starts year previous to date's year,
' otherwise it starts with date's year
If DateVal < dtmYearStart Then
AcctYear = Year(DateVal) - 1 & Format(Year(DateVal) Mod 100, "-00")
Else
AcctYear = Year(DateVal) & Format((Year(DateVal) + 1) Mod 100, "-00")
End If
End If
End Function
Public Function AcctYearQuarter(MonthStart As Integer, DayStart As Integer, Optional DateVal As Variant) As Integer
Dim dtmYearStart As Date
If IsMissing(DateVal) Or IsNull(DateVal) Then DateVal = VBA.Date
If MonthStart = 1 And DayStart = 1 Then
' accounting year is calendar year, so call DatePart function
AcctYearQuarter = DatePart("q", DateVal)
Else
' get start of accounting year in year of date value
dtmYearStart = DateSerial(Year(DateVal), MonthStart, DayStart)
' if date value is before start of accounting year
' accounting year starts year previous to date's year
If DateVal < dtmYearStart Then
dtmYearStart = DateAdd("yyyy", -1, dtmYearStart)
End If
' get quarter for date in question
Select Case DateVal
Case Is >= DateAdd("m", 9, dtmYearStart)
AcctYearQuarter = 4
Case Is >= DateAdd("m", 6, dtmYearStart)
AcctYearQuarter = 3
Case Is >= DateAdd("m", 3, dtmYearStart)
AcctYearQuarter = 2
Case Else
AcctYearQuarter = 1
End Select
End If
End Function
Public Function AcctYearStart(MonthStart As Integer, DayStart As Integer, Optional DateVal As Variant) As Date
Dim dtmYearStart As Date
If IsMissing(DateVal) Or IsNull(DateVal) Then DateVal = VBA.Date
' get start of accounting year in year of date value
dtmYearStart = DateSerial(Year(DateVal), MonthStart, DayStart)
' if date value is before start of accounting year
' accounting year starts year previous to date's year,
If DateVal < dtmYearStart Then
dtmYearStart = DateAdd("yyyy", -1, dtmYearStart)
End If
AcctYearStart = dtmYearStart
End Function