Как получить название месяца?

  1. Вариант

    Для получения названия месяца можно воспользоваться функцией Format и форматом даты MMMM

    code: #vba
    MonthNameLocal = Format(Now, "MMMM")

    Пример получения имени месяца в виде пользовательской функции, а также пример вызова этой функции.

    code: #vba
    Private Sub GetMonthName()
        MsgBox MonthNameLocal(#5/22/2005#), , "Месяц:"
    End Sub
     
    Private Function MonthNameLocal$(iDate As Date)
        MonthNameLocal$ = Format(iDate, "MMMM")
    End Function
  2. Вариант

    Для получения название месяца также можно воспользоваться функциями Choose и Month. Первая функция используется для того, чтобы возвратить значение из списка, используя его индекс(номер), а номер определяется с помощью второй функции, которая возвращает номер месяца (число от 1 до 12) для указанной даты.

    code: #vba
    MonthNameRus = Choose(Month(Now), _
    "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", _
    "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")

    Пример получения имени месяца в виде пользовательской функции, а также пример вызова этой функции.

    code: #vba
    Private Sub GetMonthName()
        MsgBox MonthNameRus(#1/22/2005#), , "Месяц:"
    End Sub
     
    Private Function MonthNameRus$(iDate As Date)
        MonthNameRus$ = Choose(Month(iDate), _
        "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", _
        "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")
    End Function
  3. Вариант

    Для решения поставленной задачи можно воспользоваться функциями Array и Month. Первая функция используется для того, чтобы возвратить массив всех месяцев. Нужный месяц (элемент массива) выбирается путём указания необходимого индекса, который представляет собой номер месяца (число от 1 до 12).

    code: #vba
    MonthNameRus = Array("", "Январь", "Февраль", "Март", _
    "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _
    "Октябрь", "Ноябрь", "Декабрь")(Month(iDate))
    code: #vba
    MonthNameRus = Array("Январь", "Февраль", "Март", _
    "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _
    "Октябрь", "Ноябрь", "Декабрь")(Month(iDate) - 1)

    Несколько однотипных примеров получения имени месяца, оформленных в виде функций.

    code: #vba
    Private Sub GetMonthName()
        MsgBox MonthNameRus(#7/22/2005#), , "Месяц:"
    End Sub
     
    Private Function MonthNameRus$(iDate As Date)
        MonthNameRus$ = Array("", "Январь", "Февраль", "Март", _
        "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _
        "Октябрь", "Ноябрь", "Декабрь")(Month(iDate))
    End Function
    code: #vba
    Private Sub GetMonthName()
        MsgBox MonthNameRus(#7/22/2005#), , "Месяц:"
    End Sub
     
    Private Function MonthNameRus$(iDate As Date)
        MonthNameRus$ = Array("Январь", "Февраль", "Март", _
        "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _
        "Октябрь", "Ноябрь", "Декабрь")(Month(iDate) - 1)
    End Function
    code: #vba
    Option Base 1
     
    Private Sub GetMonthName()
        MsgBox MonthNameRus(#7/22/2005#), , "Месяц:"
    End Sub
     
    Private Function MonthNameRus$(iDate As Date)
        MonthNameRus$ = Array("Январь", "Февраль", "Март", _
        "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _
        "Октябрь", "Ноябрь", "Декабрь")(Month(iDate))
    End Function
  4. Вариант

    Также можно воспользоваться функцией MonthName, но необходимо учитывать тот факт, что эта функция появилась только в Microsoft Excel 2000

    code: #vba
    MonthNameLocal = MonthName(Month(Now))

    Пример получения имени месяца с помощью функции MonthName (XL 2000 и старше)

    code: #vba
    Private Sub GetMonthName()
        MsgBox MonthNameLocal(#8/15/2005#), , "Месяц:"
    End Sub
     
    Private Function MonthNameLocal$(iDate As Date)
        MonthNameLocal$ = MonthName(Month(iDate))
        ' Только для Microsoft Excel 2000 и старше
    End Function

    Если Вам необходимо просто получить перечень всех месяцев, т.е. без привязки к конкретной дате, то:

    code: #vba
    For iMonth = 1 To 12
        MonthNameLocal = MonthName(iMonth)
        MsgBox MonthNameLocal 'MonthName(iMonth)
    Next
  5. Вариант

    Кроме того, можно воспользоваться одним из четырёх стандартных списков MS Excel, однако, есть опасение, что ранние версии, например, XL97 будут возвращать название месяца в английском варианте (вне зависимости от того руссифицирован Ваш офис или нет)

    code: #vba
    MonthNameLocal = Application.GetCustomListContents(4)(Month(Now))

    Обратите внимание на метод GetCustomListContents объекта Application, который возвращает массив всех месяцев, что позволяет обойтись без цикла, например, при заполнении ComboBox или ListBox

    code: #vba
    ComboBox1.List = Application.GetCustomListContents(3)
    code: #vba
    ListBox1.List = Application.GetCustomListContents(4)
  6. Вариант

    Для получения названия месяца в английском варианте (т.е. вне зависимости от того руссифицирован Ваш офис или нет) можно использовать стандартную функцию рабочего листа =ТЕКСТ()

    code: #vba
    MonthNameEng = Application.Text(Now, "MMMM")
    code: #vba
    MonthNameEng = WorksheetFunction.Text(Date, "MMMM")
    code: #vba
    MonthNameEng = [TEXT(TODAY(),"MMMM")]

    и т.д.

  7. Вариант

    Кроме того, можно воспользоваться WinAPI, т.е.

    code: #vba
    Private Declare Sub VarMonthName Lib "oleaut32.dll" ( _
            ByVal iMonth As Long, _
            ByVal fAbbrev As Long, _
            ByVal dwFlags As Long, _
            ByRef pbstrOut As String)
     
    Private Function MonthNameLocal$(iDate As Date)
        VarMonthName Month(iDate), 0&, 0&, MonthNameLocal '0& - Январь
        'VarMonthName Month(iDate), 1&, 0&, MonthNameLocal '1& - янв
    
        MonthNameLocal = StrConv(MonthNameLocal, vbFromUnicode)
    End Function
     
    Private Sub GetMonthName()
        MsgBox MonthNameLocal(#1/20/2005#), , "Месяц:"
    End Sub
Поделиться:

Похожие статьи: