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 | Вариант I. Для получения названия дня можно воспользоваться функцией Format и форматом даты DDDD. DayNameLocal = Format(Now, "DDDD") Если Вам необходимо, чтобы день недели начинался с прописной буквы, то используйте любой вариант из данного совета [FAQ37] Пример получения имени дня в виде пользовательской функции, а также вызов этой функции Private Sub GetDayName() MsgBox DayNameLocal(# 5 / 22 / 2005 #), , "День:" End Sub Private Function DayNameLocal$(iDate As Date) DayNameLocal$ = StrConv(Format(iDate, "DDDD"), vbProperCase) End Function Вариант II. Для получения название дня также можно воспользоваться функциями Choose и WeekDay. Первая функция используется для того, чтобы возвратить значение из списка, используя его индекс(номер), а номер определяется с помощью второй функции, которая возвращает номер дня (число от 1 до 7 ) для указанной даты. DayNameRus = Choose(WeekDay(Now, vbMonday), _ "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье") Пример получения имени дня в виде пользовательской функции, а также вызов этой функции. Private Sub GetDayName() MsgBox DayNameRus(# 1 / 22 / 2005 #), , "День:" End Sub Private Function DayNameRus$(iDate As Date) DayNameRus$ = Choose(WeekDay(iDate, vbMonday), _ "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье") End Function Вариант III. Для решения поставленной задачи можно также воспользоваться функциями Array и WeekDay. Первая функция используется для того, чтобы возвратить массив всех дней недели. Нужный день(элемент массива) выбирается путём указания необходимого индекса, который представляет собой номер дня (число от 1 до 7 ). DayNameRus = Array ("", "Понедельник", "Вторник", "Среда", _ "Четверг", "Пятница", "Суббота", "Воскресенье")(WeekDay(iDate, vbMonday)) DayNameRus = Array ("Понедельник", "Вторник", "Среда", _ "Четверг", "Пятница", "Суббота", "Воскресенье")(WeekDay(iDate, vbMonday) - 1 ) DayNameRus = Array ("Воскресенье", "Понедельник", _ "Вторник", "Среда", "Четверг", "Пятница", "Суббота")(WeekDay(iDate) - 1 ) Несколько однотипных примеров получения дня недели, оформленных в виде функций. Private Sub GetDayName() MsgBox DayNameRus(# 7 / 22 / 2005 #), , "День:" End Sub Private Function DayNameRus$(iDate As Date) DayNameRus$ = Array ("", "Понедельник", "Вторник", _ "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье")(WeekDay(iDate, vbMonday)) End Function Private Sub GetDayName() MsgBox DayNameRus(# 7 / 22 / 2005 #), , "День:" End Sub Private Function DayNameRus$(iDate As Date) DayNameRus$ = Array ("Понедельник", "Вторник", "Среда", _ "Четверг", "Пятница", "Суббота", "Воскресенье")(WeekDay(iDate, vbMonday) - 1 ) End Function Option Base 1 Private Sub GetDayName() MsgBox DayNameRus(# 7 / 22 / 2005 #), , "День:" End Sub Private Function DayNameRus$(iDate As Date) DayNameRus$ = Array ("Понедельник", "Вторник", _ "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье")(WeekDay(iDate, vbMonday)) End Function Вариант IV. Также можно воспользоваться функцией WeekDayName, но необходимо учитывать тот факт, что эта функция появилась только в Microsoft Excel 2000 DayNameLocal = WeekdayName(Weekday(Now, vbMonday)) Пример получения дня недели с помощью функции WeekdayName (XL 2000 и старше) Private Sub GetDayName() MsgBox DayNameLocal(# 8 / 15 / 2005 #), , "День:" End Sub Private Function DayNameLocal$(iDate As Date) DayNameLocal$ = WeekdayName(Weekday(iDate, vbMonday)) ' Только для Microsoft Excel 2000 и старше End Function Если Вам необходимо просто получить перечень всех дней недели, т.е. без привязки к конкретной дате, то используйте следующий вариант (обратите внимание на строку, позволяющую получить название дня с прописной буквы, возможно она окажется Вам полезна ... или же наоборот) For iDay = 1 To 7 DayNameLocal = WeekdayName(iDay) 'понедельник Mid(DayNameLocal, 1 , 1 ) = UCase(DayNameLocal) 'Понедельник MsgBox DayNameLocal 'WeekdayName(iDay) Next Вариант V. Кроме того, можно воспользоваться одним из четырёх стандартных списков MS Excel, однако, есть опасение, что ранние версии, например, XL97 будут возвращать название дня недели в английском варианте (вне зависимости от того руссифицирован Ваш офис или нет) DayNameLocal = Application . GetCustomListContents( 2 )(Weekday(Now, vbMonday)) Обратите внимание на метод GetCustomListContents об'екта Application, который возвращает массив всех дней недели, что позволяет обойтись без цикла, например, при заполнении ComboBox или ListBox ComboBox1 . List = Application . GetCustomListContents( 1 ) ListBox1 . List = Application . GetCustomListContents( 2 ) Вариант VI. Для получения названия дня в английском варианте (т.е. вне зависимости от того руссифицирован Ваш офис или нет) можно использовать стандартную функцию рабочего листа =ТЕКСТ() DayNameEng = Application . Text(Now, "DDDD") DayNameEng = WorksheetFunction . Text(Date, "DDDD") DayNameEng = [TEXT(TODAY(),"DDDD")] и т.д. Вариант VII. Кроме того, можно воспользоваться WinAPI, т.е. Private Declare Sub VarWeekdayName Lib "oleaut32 . dll" ( _ ByVal iWeekday As Long, _ ByVal fAbbrev As Long, _ ByVal iFirstDay As Long, _ ByVal dwFlags As Long, _ ByRef pbstrOut As String ) Private Function DayNameLocal$(iDate As Date) VarWeekdayName Weekday(iDate), 0 &, 1 &, 0 &, DayNameLocal 'VarWeekdayName Weekday(iDate, vbMonday), 0 &, 0 &, 0 &, DayNameLocal 'fAbbrev = 0 & - вторник; = 1 & - Вт DayNameLocal = StrConv(DayNameLocal, vbFromUnicode) End Function Private Sub GetDayName() MsgBox DayNameLocal(Now), , "День:" End Sub |