Как получить название месяца?
- Вариант
Для получения названия месяца можно воспользоваться функцией Format и форматом даты MMMM
code: #vbaMonthNameLocal = Format(Now, "MMMM")
Пример получения имени месяца в виде пользовательской функции, а также пример вызова этой функции.
code: #vbaPrivate Sub GetMonthName() MsgBox MonthNameLocal(#5/22/2005#), , "Месяц:" End Sub Private Function MonthNameLocal$(iDate As Date) MonthNameLocal$ = Format(iDate, "MMMM") End Function
- Вариант
Для получения название месяца также можно воспользоваться функциями Choose и Month. Первая функция используется для того, чтобы возвратить значение из списка, используя его индекс(номер), а номер определяется с помощью второй функции, которая возвращает номер месяца (число от 1 до 12) для указанной даты.
code: #vbaMonthNameRus = Choose(Month(Now), _ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", _ "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")
Пример получения имени месяца в виде пользовательской функции, а также пример вызова этой функции.
code: #vbaPrivate Sub GetMonthName() MsgBox MonthNameRus(#1/22/2005#), , "Месяц:" End Sub Private Function MonthNameRus$(iDate As Date) MonthNameRus$ = Choose(Month(iDate), _ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", _ "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь") End Function
- Вариант
Для решения поставленной задачи можно воспользоваться функциями Array и Month. Первая функция используется для того, чтобы возвратить массив всех месяцев. Нужный месяц (элемент массива) выбирается путём указания необходимого индекса, который представляет собой номер месяца (число от 1 до 12).
code: #vbaMonthNameRus = Array("", "Январь", "Февраль", "Март", _ "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _ "Октябрь", "Ноябрь", "Декабрь")(Month(iDate))
code: #vbaMonthNameRus = Array("Январь", "Февраль", "Март", _ "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _ "Октябрь", "Ноябрь", "Декабрь")(Month(iDate) - 1)
Несколько однотипных примеров получения имени месяца, оформленных в виде функций.
code: #vbaPrivate Sub GetMonthName() MsgBox MonthNameRus(#7/22/2005#), , "Месяц:" End Sub Private Function MonthNameRus$(iDate As Date) MonthNameRus$ = Array("", "Январь", "Февраль", "Март", _ "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _ "Октябрь", "Ноябрь", "Декабрь")(Month(iDate)) End Function
code: #vbaPrivate Sub GetMonthName() MsgBox MonthNameRus(#7/22/2005#), , "Месяц:" End Sub Private Function MonthNameRus$(iDate As Date) MonthNameRus$ = Array("Январь", "Февраль", "Март", _ "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _ "Октябрь", "Ноябрь", "Декабрь")(Month(iDate) - 1) End Function
code: #vbaOption Base 1 Private Sub GetMonthName() MsgBox MonthNameRus(#7/22/2005#), , "Месяц:" End Sub Private Function MonthNameRus$(iDate As Date) MonthNameRus$ = Array("Январь", "Февраль", "Март", _ "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _ "Октябрь", "Ноябрь", "Декабрь")(Month(iDate)) End Function
- Вариант
Также можно воспользоваться функцией MonthName, но необходимо учитывать тот факт, что эта функция появилась только в Microsoft Excel 2000
code: #vbaMonthNameLocal = MonthName(Month(Now))
Пример получения имени месяца с помощью функции MonthName (XL 2000 и старше)
code: #vbaPrivate 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: #vbaFor iMonth = 1 To 12 MonthNameLocal = MonthName(iMonth) MsgBox MonthNameLocal 'MonthName(iMonth) Next
- Вариант
Кроме того, можно воспользоваться одним из четырёх стандартных списков MS Excel, однако, есть опасение, что ранние версии, например, XL97 будут возвращать название месяца в английском варианте (вне зависимости от того руссифицирован Ваш офис или нет)
code: #vbaMonthNameLocal = Application.GetCustomListContents(4)(Month(Now))
Обратите внимание на метод GetCustomListContents объекта Application, который возвращает массив всех месяцев, что позволяет обойтись без цикла, например, при заполнении ComboBox или ListBox
code: #vbaComboBox1.List = Application.GetCustomListContents(3)
code: #vbaListBox1.List = Application.GetCustomListContents(4)
- Вариант
Для получения названия месяца в английском варианте (т.е. вне зависимости от того руссифицирован Ваш офис или нет) можно использовать стандартную функцию рабочего листа =ТЕКСТ()
code: #vbaMonthNameEng = Application.Text(Now, "MMMM")
code: #vbaMonthNameEng = WorksheetFunction.Text(Date, "MMMM")
code: #vbaMonthNameEng = [TEXT(TODAY(),"MMMM")]
и т.д.
- Вариант
Кроме того, можно воспользоваться WinAPI, т.е.
code: #vbaPrivate 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