You can use my function MonthNameInvariant:
' Constants:
Public Const MaxMonthValue As Integer = 12
Public Const MinMonthValue As Integer = 1
' Returns the English month name for the passed month number.
' Accepted numbers are 1 to 12. Other values will raise an error.
' If Abbreviate is True, the returned name is abbreviated.
'
' 2015-11-25. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function MonthNameInvariant( _
ByVal Month As Long, _
Optional ByVal Abbreviate As Boolean) _
As String
Const AbbreviatedLength As Integer = 3
Dim MonthName( _
MinMonthValue To _
MaxMonthValue) As String
Dim Name As String
If Not IsMonth(Month) Then
Err.Raise DtError.dtInvalidProcedureCallOrArgument
Exit Function
End If
' Non-localized (invariant) month names.
MonthName(1) = "January"
MonthName(2) = "February"
MonthName(3) = "March"
MonthName(4) = "April"
MonthName(5) = "May"
MonthName(6) = "June"
MonthName(7) = "July"
MonthName(8) = "August"
MonthName(9) = "September"
MonthName(10) = "October"
MonthName(11) = "November"
MonthName(12) = "December"
If Abbreviate = True Then
Name = Left(MonthName(Month), AbbreviatedLength)
Else
Name = MonthName(Month)
End If
MonthNameInvariant = Name
End Function
Full code and documentation in my library at GitHub: VBA.Date.
Addendum:
To create a text formatted as you have specified, you could use something like this:
Dim SendDate As Date
Dim TextDateInMail As String
' The date value in the mail to send.
SendDate = Date
' The formatted text date in the mail to send.
TextDateInMail = MonthNameInvariant(Month(SendDate)) & Format(SendDate, " dd, yyyy")
' Value of TextDateInMail:
' April 01, 2023