Public Function GetAge(varDoB As Variant, blnFebLeapAnniversary As Boolean, Optional varAgeAt As Variant) As Variant
' Returns: Age in years as an integer.
' Accepts: varDoB; date/time value
' blnFebLeapAnniversary; Boolean constant, TRUE if anniversary
' of 29 February birthday is 28 February, FALSE if is 1 March.
' varAgeAt; date/time value, optional; date at which age to be computed,
' defaults to current date.
If Not IsNull(varDoB) Then
If IsMissing(varAgeAt) Then varAgeAt = VBA.Date
GetAge = DateDiff("yyyy", varDoB, varAgeAt) - _
IIf(Format(varAgeAt, "mmdd") < Format(varDoB, "mmdd"), 1, 0)
' adjust for leap year if necessary
If blnFebLeapAnniversary Then
If IsLeapDate(varDoB) And Month(varAgeAt) = 2 And Day(varAgeAt) = 28 And Not IsLeapDate(varAgeAt + 1) Then
GetAge = GetAge + 1
End If
End If
End If
End Function