Получить название месяца — Visual Basic(Бейсик)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Вариант
Для получения названия месяца можно воспользоваться функцией Format и форматом даты MMMM
 
MonthNameLocal = Format(Now, "MMMM")
Пример получения имени месяца в виде пользовательской функции, а также пример вызова этой функции.
 
Private 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) для указанной даты.
 
MonthNameRus = Choose(Month(Now), _
"Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", _
"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")
Пример получения имени месяца в виде пользовательской функции, а также пример вызова этой функции.
 
Private 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).
 
MonthNameRus = Array("", "Январь", "Февраль", "Март", _
"Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _
"Октябрь", "Ноябрь", "Декабрь")(Month(iDate))
code: #vba
MonthNameRus = Array("Январь", "Февраль", "Март", _
"Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _
"Октябрь", "Ноябрь", "Декабрь")(Month(iDate) - 1)
Несколько однотипных примеров получения имени месяца, оформленных в виде функций.
 
Private Sub GetMonthName()
    MsgBox MonthNameRus(#7/22/2005#), , "Месяц:"
End Sub
  
Private Function MonthNameRus$(iDate As Date)
    MonthNameRus$ = Array("", "Январь", "Февраль", "Март", _
    "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _
    "Октябрь", "Ноябрь", "Декабрь")(Month(iDate))
End Function
 
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
 
Вариант
Также можно воспользоваться функцией MonthName, но необходимо учитывать тот факт, что эта функция появилась только в Microsoft Excel 2000
 
MonthNameLocal = MonthName(Month(Now))
Пример получения имени месяца с помощью функции MonthName (XL 2000 и старше)
 
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
Если Вам необходимо просто получить перечень всех месяцев, т.е. без привязки к конкретной дате, то:
 
For iMonth = 1 To 12
    MonthNameLocal = MonthName(iMonth)
    MsgBox MonthNameLocal 'MonthName(iMonth)
Next
Вариант
Кроме того, можно воспользоваться одним из четырёх стандартных списков MS Excel, однако, есть опасение, что ранние версии, например, XL97 будут возвращать название месяца в английском варианте (вне зависимости от того руссифицирован Ваш офис или нет)
 
MonthNameLocal = Application.GetCustomListContents(4)(Month(Now))
Обратите внимание на метод GetCustomListContents объекта Application, который возвращает массив всех месяцев, что позволяет обойтись без цикла, например, при заполнении ComboBox или ListBox
 
ComboBox1.List = Application.GetCustomListContents(3)
 
ListBox1.List = Application.GetCustomListContents(4)
Вариант
Для получения названия месяца в английском варианте (т.е. вне зависимости от того руссифицирован Ваш офис или нет) можно использовать стандартную функцию рабочего листа =ТЕКСТ()
 
MonthNameEng = Application.Text(Now, "MMMM")
 
MonthNameEng = WorksheetFunction.Text(Date, "MMMM")
 
MonthNameEng = [TEXT(TODAY(),"MMMM")]
и т.д.
 
Вариант
Кроме того, можно воспользоваться WinAPI, т.е.
 
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

Leave a Comment