You might be interested to see the interface for the Minutes script using M$ Word.
The Tabs along the top are the various sections of the minutes, and the script adds text to the bare bones info.
For example if you put name(s) into the New Members line then this will appear in the minutes:
The branch welcomed Bill Blogs and Ernie Dingo as new members
If it is left blank then nothing appears in the minutes. I have found that is better than having a template with everything included and filling in blanks or deleting lines.
The minutes are less than two pages even if every section has something entered. The script is now quite long and complex but it grew over time and works faultlessly (touch wood), the new addition for the new meeting dates is only a tiny addition. This was the test data I added:
'calculates meeting for 2nd and 4th ThisWeeksday of month
Private Sub FindDate()
Dim LastMeeting As Date
Dim ThisMeeting As Date
Dim NextMeeting As Date
Dim ThisDate As Date
Dim ThisMonth As Integer
'ThisDate = Date '<<<<<<<<uncomment<<<<<<<
'test dates
ThisDate = #12/2/2024# '<<<<<<<<<<Comment out<<<<<<<<<
ThisMonth = Month(ThisDate)
Select Case ThisMonth
Case Is = 1
'4th ThisWeeks in January
ThisMeeting = ThisDay(Year(ThisDate), ThisMonth, 4)
LastMeeting = ThisDay(Year(ThisDate) - 1, 12, 2)
NextMeeting = ThisDay(Year(ThisDate), ThisMonth + 1, 2)
If ThisDate < ThisMeeting Then
ThisMeeting = ThisDay(Year(ThisDate) - 1, 12, 2)
LastMeeting = ThisDay(Year(ThisDate) - 1, 11, 4)
NextMeeting = ThisDay(Year(ThisDate), ThisMonth, 4)
End If
Case 2 To 11
'2nd ThisWeeks in month
ThisMeeting = ThisDay(Year(ThisDate), ThisMonth, 2)
LastMeeting = ThisDay(Year(ThisDate), ThisMonth - 1, 4)
NextMeeting = ThisDay(Year(ThisDate), ThisMonth, 4)
If ThisDate < ThisMeeting And ThisMonth > 2 Then
ThisMeeting = ThisDay(Year(ThisDate), ThisMonth - 1, 4)
LastMeeting = ThisDay(Year(ThisDate), ThisMonth - 1, 2)
NextMeeting = ThisDay(Year(ThisDate), ThisMonth, 2)
End If
If ThisDate < ThisMeeting And ThisMonth = 2 Then
ThisMeeting = ThisDay(Year(ThisDate), ThisMonth - 1, 4)
LastMeeting = ThisDay(Year(ThisDate) - 1, 12, 2)
NextMeeting = ThisDay(Year(ThisDate), ThisMonth, 2)
End If
If ThisDate > ThisMeeting + 13 Then
ThisMeeting = ThisDay(Year(ThisDate), ThisMonth, 4)
LastMeeting = ThisDay(Year(ThisDate), ThisMonth, 2)
NextMeeting = ThisDay(Year(ThisDate), ThisMonth + 1, 2)
End If
Case Is = 12
'2nd ThisWeeks in Dec
ThisMeeting = ThisDay(Year(ThisDate), ThisMonth, 2)
LastMeeting = ThisDay(Year(ThisDate), ThisMonth - 1, 4)
NextMeeting = ThisDay(Year(ThisDate) + 1, 1, 4)
If ThisDate < ThisMeeting Then
'4th ThisWeeks Nov
ThisMeeting = ThisDay(Year(ThisDate), ThisMonth - 1, 4)
LastMeeting = ThisDay(Year(ThisDate), ThisMonth - 1, 2)
NextMeeting = ThisDay(Year(ThisDate), ThisMonth, 2)
End If
End Select
Debug.Print "This Meeting = " & ThisMeeting
Debug.Print "Last Meeting = " & LastMeeting
Debug.Print "Next Meeting = " & NextMeeting
End Sub
Function ThisDay(ByVal yy As Long, ByVal mm As Long, ByVal ThisWeek As Integer) As Date
' calculates date of nth day (nDay) of nth week (ThisWeek) of month
' ie 2nd Thursday in month
Dim nD As Date
Dim nDay As Integer
Dim nDate As Integer
nDate = (7 * (ThisWeek - 1)) + 1
'nDay Value - SUN=1 MON=2 TUES= 3 WED=4 THUR=5 FRI=6 SAT=7
nDay = 5
nD = DateSerial(yy, mm, nDate)
While Weekday(nD) <> nDay
nD = nD + 1
Wend
ThisDay = nD
End Function
The Function section is as previously mentioned. The rest replaced a few lines of code because once you had the current date it was just a matter of adding or subtracting 14 whereas the new system is a bit more complex. Rewriting it also gave me the opportunity to automate bits that I would have previous altered manually.
.