declaration / initialize
Option Compare Database
Option Explicit
Public Const MinYear As Long = 1300
Public Const MaxYear As Long = 1420
Public Const MinPrDate As Long = 13000101
Public Const MaxPrDate As Long = 14201230
Public Const MinGrDate As Date = #3/21/1921# ' Persian 1300/01/01
Public Const MaxGrDate As Date = #3/20/2042# ' Persian 1420/12/30
Public LeapYears
Public MonthNames
Public WeekDayNames
Public Type DateSpan
Year As Long
Month As Long
Day As Long
TotalDays As Long
Sign As Long
End Type
Public Enum WeekRule
FirstDay = 1
FirstSaturDay = 2
End Enum
Public Sub InitializeData()
If IsInitialized Then Exit Sub
Calendar = vbCalGreg
WeekDayNames = Array("", "شنبه", "یکشنبه", "دوشنبه", "سهشنبه", "چهارشنبه", "پنجشنبه", "آدینه")
MonthNames = Array("", "فروردین", "اردیبهشت", "خرداد", "تیر", "امرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند")
Dim ly: ly = Array(0, 4, 9, 13, 17, 21, 25, 29, 33, 37, 42, 46, 50, 54, 58, 62, 66, 70, 75, 79, 83, 87, 91, 95, 99, 103, 108, 112, 116, 120)
ReDim LeapYears(MinYear To MaxYear)
Dim i As Integer
For i = MinYear To MaxYear
LeapYears(i) = False
Next i
For i = LBound(ly) To UBound(ly)
LeapYears(ly(i) + MinYear) = True
Next i
End Sub
Public Function IsInitialized() As Boolean
IsInitialized = (VarType(MonthNames) > (vbEmpty + vbNull))
End Function