I’ve been working on a class module called clsDateInfo that returns various properties of a given date, and using it in some monthly trend graphs. I had to come up with the number of weekdays?not counting weekends?a given date was from the first of the month. The clsDateInfo.WeekDayOfMonth property returns the answer in a flash:
Option Explicit' clsDateInfo' Chuck Spohr 9/23/1999' Set the DateToCheck property of this object and ' the other properties will return various useful ' values about that datePrivate mdtDate As DatePublic Property Let DateToCheck(pdtDate As Date) mdtDate = pdtDateEnd PropertyPublic Property Get DateToCheck() As Date DateToCheck = mdtDateEnd PropertyPublic Property Get WeekDayOfMonth() As Integer If Me.DayOfWeek = vbSunday Or Me.DayOfWeek = _ vbSaturday Then WeekDayOfMonth = 0 Else WeekDayOfMonth = (5 * (Me.WeekOfMonth - 1)) - _ Me.FirstDayOfWeekOfMonth + Me.DayOfWeek + 1 End IfEnd PropertyPublic Property Get WeekOfMonth() As Integer WeekOfMonth = Week Me.FirstWeekOfMonth + 1End PropertyPublic Property Get FirstWeekOfMonth() As Integer FirstWeekOfMonth = DatePart("ww", Me.FirstDayOfMonth)End PropertyPublic Property Get FirstDayOfWeekOfMonth() As Integer FirstDayOfWeekOfMonth = DatePart("w", Me.FirstDayOfMonth)End PropertyPublic Property Get Week() As Integer Week = DatePart("ww", mdtDate)End PropertyPublic Property Get FirstDayOfMonth() As Variant FirstDayOfMonth = DateSerial(DatePart("yyyy", _ mdtDate), DatePart("m", mdtDate), 1)End PropertyPublic Property Get DayOfWeek() As Integer DayOfWeek = DatePart("w", mdtDate)End PropertyPrivate Sub Class_Initialize() mdtDate = Now()End Sub