VB6Parse / Library / Datetime / monthname

VB6 Library Reference

MonthName Function

Returns a String indicating the specified month.

Syntax

MonthName(month, [abbreviate])

Parameters

Return Value

Returns a String representing the month name: - If abbreviate is False or omitted: Full month name (e.g., "January", "February") - If abbreviate is True: Abbreviated month name (e.g., "Jan", "Feb")

Remarks

The MonthName function returns the localized name of the month based on the system's regional settings. It is commonly used for displaying month names in user interfaces, reports, and formatted output.

Key Characteristics:

Common Use Cases:

Typical Uses

  1. Display Month Names - Convert month numbers to readable names
  2. Report Headers - Format report titles with month names
  3. Calendar Controls - Populate month selectors
  4. Data Export - Include readable month names in exports
  5. User Interface - Display current or selected month
  6. Chart Labels - Label chart axes with month names
  7. File Naming - Create month-based file names
  8. Internationalization - Automatic locale-based month names

Basic Examples

' Example 1: Get full month name
Dim monthName As String
monthName = MonthName(3)
' Returns "March"
' Example 2: Get abbreviated month name
Dim shortMonth As String
shortMonth = MonthName(11, True)
' Returns "Nov"
' Example 3: Display current month
Dim currentMonthName As String
currentMonthName = MonthName(Month(Date))
MsgBox "Current month is " & currentMonthName
' Example 4: Format date with month name
Dim formattedDate As String
Dim d As Date
d = #5/15/2025#
formattedDate = MonthName(Month(d)) & " " & Day(d) & ", " & Year(d)
' Returns "May 15, 2025"

Common Patterns

' Pattern 1: Safe month name with validation
Function SafeMonthName(monthNumber As Integer, _
                       Optional abbreviate As Boolean = False) As String
    If monthNumber < 1 Or monthNumber > 12 Then
        SafeMonthName = ""
    Else
        SafeMonthName = MonthName(monthNumber, abbreviate)
    End If
End Function
' Pattern 2: Populate month combo box
Sub PopulateMonthCombo(cbo As ComboBox, Optional abbreviate As Boolean = False)
    Dim i As Integer
    cbo.Clear
    For i = 1 To 12
        cbo.AddItem MonthName(i, abbreviate)
    Next i
End Sub
' Pattern 3: Get month name from date
Function GetMonthNameFromDate(dateValue As Date, _
                              Optional abbreviate As Boolean = False) As String
    GetMonthNameFromDate = MonthName(Month(dateValue), abbreviate)
End Function
' Pattern 4: Format date range with month names
Function FormatDateRange(startDate As Date, endDate As Date) As String
    Dim startMonth As String
    Dim endMonth As String
    startMonth = MonthName(Month(startDate), True)
    endMonth = MonthName(Month(endDate), True)
    FormatDateRange = startMonth & " " & Day(startDate) & " - " & _
                      endMonth & " " & Day(endDate) & ", " & Year(endDate)
End Function
' Pattern 5: Create month-based filename
Function GetMonthlyFileName(fileDate As Date, fileType As String) As String
    Dim monthAbbrev As String
    monthAbbrev = MonthName(Month(fileDate), True)
    GetMonthlyFileName = fileType & "_" & Year(fileDate) & "_" & monthAbbrev & ".dat"
End Function
' Pattern 6: Build month selection array
Function GetMonthArray(fullNames As Boolean) As String()
    Dim months() As String
    Dim i As Integer
    ReDim months(1 To 12)
    For i = 1 To 12
        months(i) = MonthName(i, Not fullNames)
    Next i
    GetMonthArray = months
End Function
' Pattern 7: Format month/year string
Function FormatMonthYear(dateValue As Date, abbreviate As Boolean) As String
    FormatMonthYear = MonthName(Month(dateValue), abbreviate) & " " & Year(dateValue)
End Function
' Pattern 8: Get fiscal month name
Function GetFiscalMonthName(fiscalMonth As Integer, abbreviate As Boolean) As String
    ' Fiscal month 1 might be October (calendar month 10)
    Dim calendarMonth As Integer
    Dim fiscalStartMonth As Integer
    fiscalStartMonth = 10 ' October
    calendarMonth = fiscalMonth + fiscalStartMonth - 1
    If calendarMonth > 12 Then
        calendarMonth = calendarMonth - 12
    End If
    GetFiscalMonthName = MonthName(calendarMonth, abbreviate)
End Function
' Pattern 9: Create report header
Function CreateMonthlyReportHeader(reportDate As Date) As String
    Dim header As String
    header = "Monthly Report - " & MonthName(Month(reportDate)) & " " & Year(reportDate)
    CreateMonthlyReportHeader = header
End Function
' Pattern 10: Compare month names
Function IsSameMonth(date1 As Date, date2 As Date) As Boolean
    IsSameMonth = (MonthName(Month(date1)) = MonthName(Month(date2))) And _
                  (Year(date1) = Year(date2))
End Function

Advanced Usage

Example 1: Calendar Generator

' Class: CalendarGenerator
' Generates formatted calendar displays
Option Explicit
Private m_year As Integer
Private m_month As Integer
Private m_firstDayOfWeek As VbDayOfWeek
Public Sub Initialize(calYear As Integer, calMonth As Integer)
    m_year = calYear
    m_month = calMonth
    m_firstDayOfWeek = vbSunday
End Sub
Public Function GetMonthHeader(abbreviate As Boolean) As String
    GetMonthHeader = MonthName(m_month, abbreviate) & " " & m_year
End Function
Public Function GenerateCalendar() As String
    Dim calendar As String
    Dim firstDay As Date
    Dim lastDay As Date
    Dim currentDay As Date
    Dim dayOfWeek As Integer
    Dim weekRow As String
    Dim dayCount As Integer
    ' Create header
    calendar = String(28, " ") & GetMonthHeader(False) & vbCrLf
    calendar = calendar & "Su  Mo  Tu  We  Th  Fr  Sa" & vbCrLf
    ' Get first and last day of month
    firstDay = DateSerial(m_year, m_month, 1)
    lastDay = DateSerial(m_year, m_month + 1, 0)
    ' Start with padding for first week
    dayOfWeek = Weekday(firstDay, m_firstDayOfWeek)
    weekRow = String((dayOfWeek - 1) * 4, " ")
    ' Fill in days
    currentDay = firstDay
    Do While currentDay <= lastDay
        weekRow = weekRow & Format(Day(currentDay), "00") & "  "
        dayOfWeek = dayOfWeek + 1
        If dayOfWeek > 7 Then
            calendar = calendar & weekRow & vbCrLf
            weekRow = ""
            dayOfWeek = 1
        End If
        currentDay = DateAdd("d", 1, currentDay)
    Loop
    If Len(weekRow) > 0 Then
        calendar = calendar & weekRow & vbCrLf
    End If
    GenerateCalendar = calendar
End Function
Public Function GetAllMonthsForYear(abbreviate As Boolean) As String()
    Dim months() As String
    Dim i As Integer
    ReDim months(1 To 12)
    For i = 1 To 12
        months(i) = MonthName(i, abbreviate)
    Next i
    GetAllMonthsForYear = months
End Function

Example 2: Report Generator with Month Names

' Class: MonthlyReportFormatter
' Formats reports with localized month names
Option Explicit
Private m_useAbbreviations As Boolean
Private m_reportData As Collection
Public Sub Initialize(useAbbrev As Boolean)
    m_useAbbreviations = useAbbrev
    Set m_reportData = New Collection
End Sub
Public Sub AddMonthData(monthNum As Integer, dataValue As Double)
    Dim entry As String
    entry = MonthName(monthNum, m_useAbbreviations) & ":" & dataValue
    m_reportData.Add entry
End Sub
Public Function GenerateReport() As String
    Dim report As String
    Dim item As Variant
    Dim i As Integer
    report = "Monthly Summary Report" & vbCrLf
    report = report & String(50, "-") & vbCrLf
    For Each item In m_reportData
        report = report & item & vbCrLf
    Next item
    GenerateReport = report
End Function
Public Function FormatDateWithMonth(dateValue As Date) As String
    FormatDateWithMonth = MonthName(Month(dateValue), m_useAbbreviations) & _
                         " " & Day(dateValue) & ", " & Year(dateValue)
End Function
Public Function GetQuarterMonths(quarter As Integer) As String
    Dim months As String
    Dim startMonth As Integer
    Dim i As Integer
    startMonth = ((quarter - 1) * 3) + 1
    For i = 0 To 2
        If i > 0 Then months = months & ", "
        months = months & MonthName(startMonth + i, m_useAbbreviations)
    Next i
    GetQuarterMonths = months
End Function

Example 3: Internationalized Date Formatter

' Module: InternationalDateFormatter
' Provides locale-aware date formatting using MonthName
Option Explicit
Public Enum DateFormat
    dfLong = 0          ' "January 15, 2025"
    dfMedium = 1        ' "Jan 15, 2025"
    dfShort = 2         ' "01/15/2025"
    dfMonthYear = 3     ' "January 2025"
    dfMonthYearShort = 4 ' "Jan 2025"
End Enum
Public Function FormatDate(dateValue As Date, formatType As DateFormat) As String
    Select Case formatType
        Case dfLong
            FormatDate = MonthName(Month(dateValue)) & " " & _
                        Day(dateValue) & ", " & Year(dateValue)
        Case dfMedium
            FormatDate = MonthName(Month(dateValue), True) & " " & _
                        Day(dateValue) & ", " & Year(dateValue)
        Case dfShort
            FormatDate = Format(dateValue, "mm/dd/yyyy")
        Case dfMonthYear
            FormatDate = MonthName(Month(dateValue)) & " " & Year(dateValue)
        Case dfMonthYearShort
            FormatDate = MonthName(Month(dateValue), True) & " " & Year(dateValue)
    End Select
End Function
Public Function FormatDateRange(startDate As Date, endDate As Date, _
                               abbreviate As Boolean) As String
    Dim result As String
    If Year(startDate) = Year(endDate) Then
        If Month(startDate) = Month(endDate) Then
            ' Same month and year
            result = MonthName(Month(startDate), abbreviate) & " " & _
                    Day(startDate) & "-" & Day(endDate) & ", " & Year(startDate)
        Else
            ' Different months, same year
            result = MonthName(Month(startDate), abbreviate) & " " & Day(startDate) & " - " & _
                    MonthName(Month(endDate), abbreviate) & " " & Day(endDate) & ", " & _
                    Year(endDate)
        End If
    Else
        ' Different years
        result = MonthName(Month(startDate), abbreviate) & " " & Day(startDate) & ", " & _
                Year(startDate) & " - " & _
                MonthName(Month(endDate), abbreviate) & " " & Day(endDate) & ", " & _
                Year(endDate)
    End If
    FormatDateRange = result
End Function
Public Function GetMonthNames(abbreviate As Boolean) As String()
    Dim months(1 To 12) As String
    Dim i As Integer
    For i = 1 To 12
        months(i) = MonthName(i, abbreviate)
    Next i
    GetMonthNames = months
End Function
Public Function ParseMonthName(monthString As String) As Integer
    Dim i As Integer
    ' Try full names first
    For i = 1 To 12
        If UCase(MonthName(i)) = UCase(monthString) Then
            ParseMonthName = i
            Exit Function
        End If
    Next i
    ' Try abbreviated names
    For i = 1 To 12
        If UCase(MonthName(i, True)) = UCase(monthString) Then
            ParseMonthName = i
            Exit Function
        End If
    Next i
    ParseMonthName = 0 ' Not found
End Function

Example 4: Chart Label Generator

' Class: ChartLabelGenerator
' Generates chart labels with month names
Option Explicit
Private m_startMonth As Integer
Private m_monthCount As Integer
Private m_abbreviate As Boolean
Public Sub Initialize(startMonth As Integer, monthCount As Integer, _
                      abbreviate As Boolean)
    If startMonth < 1 Or startMonth > 12 Then
        Err.Raise 5, "ChartLabelGenerator", "Invalid start month"
    End If
    m_startMonth = startMonth
    m_monthCount = monthCount
    m_abbreviate = abbreviate
End Sub
Public Function GetLabels() As String()
    Dim labels() As String
    Dim i As Integer
    Dim currentMonth As Integer
    ReDim labels(0 To m_monthCount - 1)
    For i = 0 To m_monthCount - 1
        currentMonth = m_startMonth + i
        ' Wrap around if exceeds 12
        If currentMonth > 12 Then
            currentMonth = currentMonth - 12
        End If
        labels(i) = MonthName(currentMonth, m_abbreviate)
    Next i
    GetLabels = labels
End Function
Public Function GetLabelWithYear(monthNum As Integer, yearNum As Integer) As String
    GetLabelWithYear = MonthName(monthNum, m_abbreviate) & " '" & _
                       Right(CStr(yearNum), 2)
End Function
Public Function GetQuarterLabel(quarter As Integer, yearNum As Integer) As String
    Dim firstMonth As Integer
    firstMonth = ((quarter - 1) * 3) + 1
    GetQuarterLabel = "Q" & quarter & " (" & _
                     MonthName(firstMonth, True) & "-" & _
                     MonthName(firstMonth + 2, True) & " " & _
                     yearNum & ")"
End Function
Public Function GetYearLabels(abbreviate As Boolean) As String()
    Dim labels(1 To 12) As String
    Dim i As Integer
    For i = 1 To 12
        labels(i) = MonthName(i, abbreviate)
    Next i
    GetYearLabels = labels
End Function
Public Function FormatMultiYearLabel(monthNum As Integer, _
                                    startYear As Integer, _
                                    endYear As Integer) As String
    FormatMultiYearLabel = MonthName(monthNum, m_abbreviate) & " " & _
                          startYear & "-" & endYear
End Function

Error Handling

On Error Resume Next
monthName = MonthName(monthNum)
If Err.Number = 5 Then
    MsgBox "Invalid month number. Must be between 1 and 12."
ElseIf Err.Number <> 0 Then
    MsgBox "Error getting month name: " & Err.Description
End If
On Error GoTo 0

Performance Considerations

Best Practices

  1. Validate month numbers - Always check that month is 1-12 before calling
  2. Use for localization - Leverages system locale for international support
  3. Combine with Month() - Extract month number from dates, then get name
  4. Consider abbreviations - Use abbreviated names for space-constrained displays
  5. Cache for UI - Populate drop-downs once, not on every refresh
  6. Document format - Clearly state whether full or abbreviated names are expected
  7. Test locales - Test with different regional settings for international apps
  8. Handle errors - Wrap in error handling for robust code
  9. Use constants - Define month number constants for readability
  10. Prefer over arrays - Use MonthName() instead of hardcoded name arrays

Comparison with Other Approaches

Approach Pros Cons
MonthName() Automatic localization, simple, no maintenance Requires VBA/VB6, slightly slower than array
Hardcoded array Fast, full control No localization, maintenance burden
Format() Flexible formatting Returns different formats, not just name
DatePart() Returns number, not name Need to convert to name separately

Localization Notes

The MonthName function returns month names based on the system's regional settings: - English (US): "January", "February", etc. / "Jan", "Feb", etc. - Spanish: "enero", "febrero", etc. / "ene", "feb", etc. - French: "janvier", "février", etc. / "janv", "févr", etc. - German: "Januar", "Februar", etc. / "Jan", "Feb", etc. - Japanese: "1月", "2月", etc. - And many more locales...

Platform Notes

Limitations

VB6 Parser Notes

MonthName is parsed as a regular function call (CallExpression). This module exists primarily for documentation purposes to provide comprehensive reference material for VB6 developers working with date formatting and display operations requiring localized month names.

← Back to Datetime | View all functions