Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Работа с датой и временем
Для хранения даты и времени в языке VBA предназначен тип данных Date
. Объявить переменную позволяет следующий код:
Dim d As Date
При присваивании значения дата и время должны быть расположены внутри символов #
, в следующих форматах:
d = #8/20/2012# ' #месяц/день/год#
Debug.Print d ' 20.08.2012
d = #8/20/2012 10:48:12 AM#
Debug.Print d ' 20.08.2012 10:48:12
d = #8/20/2012 10:48:12 PM#
Debug.Print d ' 20.08.2012 22:48:12
d = #10:48:12 PM# ' AM - до полудня, а PM - после полудня
Debug.Print d ' 22:48:12
Значение даты должно быть в диапазоне от 1 января 100 года до 31 декабря 9999 года, а значение времени в диапазоне от 0:00:00 до 23:59:59. Дата и время хранятся в виде вещественного числа. Целая часть представляет количество дней, а дробная часть — время. Числу 0
соответствует дата 30 декабря 1899 года, положительные значения представляют даты после этого дня, а отрицательные — до этого дня. Пример:
d = 1
Debug.Print d ' 31.12.1899
d = 41150
Debug.Print d ' 29.08.2012
d = -8500
Debug.Print d ' 21.09.1876
Задать значение даты и времени позволяют также следующие функции:
DateSerial(<Год>, <Месяц>, <День>)
— задает значение для даты:
Debug.Print DateSerial(2012, 9, 19) ' 19.09.2012
TimeSerial(<Часы>, <Минуты>, <Секунды>)
— задает значение для времени:
Debug.Print TimeSerial(14, 5, 12) ' 14:05:12
DateValue(<Строка с датой>)
— преобразует строку с датой в значение типаVariant
(Date)
. Если строку преобразовать невозможно, то возникает ошибка. Пример:
Debug.Print DateValue("9/19/2012") ' 19.09.2012
Debug.Print DateValue("19 Сентября 2012") ' 19.09.2012
Debug.Print DateValue("19.09.2012") ' 19.09.2012
TimeValue(<Строка со временем>)
— преобразует строку со временем в значение типаVariant
(Date)
. Пример:
Debug.Print TimeValue("17:12:35") ' 17:12:35
Получение текущей даты и времени
Получить текущую дату и время позволяют следующие функции:
Time()
— возвращает системное время:
Dim d As Date
d = Time
Debug.Print d ' 20:32:44
Функция Time()
возвращает значение типа Variant
(Date)
. Чтобы получить значение типа String
следует использовать функцию Time$()
. Пример:
Debug.Print Time$ ' 20:32:44
Date()
— возвращает системную дату:
d = Date
Debug.Print d ' 18.09.2012
Функция Date()
возвращает значение типа Variant
(Date)
. Чтобы получить значение типа String
следует использовать функцию Date$()
. Пример:
Debug.Print Date$ ' 09-18-2012
Now()
— возвращает системную дату и время (типVariant
(Date)
):
d = Now
Debug.Print d ' 18.09.2012 20:32:44
Timer()
— возвращает количество секунд (число, имеющее типSingle
), прошедших с начала суток:
Debug.Print Timer ' 75029,61
Получение отдельных составляющих даты и времени
Получить значения отдельных составляющих даты и времени позволяют следующие функции:
Day(<Дата>)
— возвращает день месяца (значение типаVariant (Integer)
):
Debug.Print Day(#9/20/2012#) ' 20
Month(<Дата>)
— возвращает месяц (значение типаVariant (Integer)
):
Debug.Print Month(#9/20/2012#) ' 9
Year(<Дата>)
— возвращает год (значение типаVariant (Integer)
):
Debug.Print Year(#9/20/2012#) ' 2012
Weekday(<Дата>[, <Первый день недели>])
— возвращает день недели (значение типаVariant (Integer)
). Во втором параметре указывается первый день недели (константыvbMonday
,vbTuesday
,vbWednesday
,vbThursday
,vbFriday
,vbSaturday
,vbSunday
(значение по умолчанию)). Пример:
Debug.Print Weekday(#9/20/2012#) ' 5
Debug.Print Weekday(#9/20/2012#, vbMonday) ' 4
Hour(<Время>)
— возвращает часы (значение типаVariant (Integer)
):
Debug.Print Hour(#10:10:57 PM#) ' 22
Minute(<Время>)
— возвращает минуты (значение типаVariant (Integer)
):
Debug.Print Minute(#10:10:57 PM#) ' 10
Second(<Время>)
— возвращает секунды (значение типаVariant (Integer)
):
Debug.Print Second(#10:10:57 PM#) ' 57
DatePart()
— возвращает указанный компонент даты. Формат функции:
DatePart(<Компонент>, <Дата>[, <Первый день недели>[,
<Первая неделя года>]])
В первом параметре задается строка с одним из значений: yyyy
(год), q
(квартал), m
(месяц), y
(день года), d
(день месяца), w
(день недели), ww
(неделя), h
(часы), n
(минуты) и s
(секунды), а во втором параметре — значение даты. В третьем параметре указывается первый день недели (константы vbMonday
, vbTuesday
, vbWednesday
, vbThursday
, vbFriday
, vbSaturday
, vbSunday
(значение по умолчанию)), а в четвертом параметре — первая неделя года (константы vbFirstJan1
(значение по умолчанию), vbFirstFullWeek
, vbFirstFourDays
и vbUseSystem
). Пример:
Dim d As Date
d = #8/20/2012 10:48:12 PM#
Debug.Print DatePart("yyyy", d) ' 2012
Debug.Print DatePart("q", d) ' 3
Debug.Print DatePart("m", d) ' 8
Debug.Print DatePart("y", d) ' 233
Debug.Print DatePart("d", d) ' 20
Debug.Print DatePart("w", d) ' 2
Debug.Print DatePart("w", d, vbMonday) ' 1
Debug.Print DatePart("ww", d) ' 34
Debug.Print DatePart("h", d) ' 22
Debug.Print DatePart("n", d) ' 48
Debug.Print DatePart("s", d) ' 12
WeekdayName(<Номер>[, <Флаг>[, <Первый день недели>]])
— возвращает название дня недели в виде строки. В первом параметре указывается порядковый номер дня в неделе. Если во втором параметре задано значениеFalse
(значение по умолчанию), то возвращается полное название дня недели, а еслиTrue
— то сокращенное. В третьем параметре указывается первый день недели (константыvbMonday
,vbTuesday
,vbWednesday
,vbThursday
,vbFriday
,vbSaturday
,vbSunday
иvbUseSystemDayOfWeek
(значение по умолчанию)). Пример:
Debug.Print WeekdayName(1, False, vbMonday) ' понедельник
Debug.Print WeekdayName(1, True, vbMonday) ' Пн
MonthName(<Номер>[, <Флаг>])
— возвращает название месяца в виде строки. Если во втором параметре задано значениеFalse
(значение по умолчанию), то возвращается полное название месяца, а еслиTrue
— то сокращенное. Пример:
Debug.Print MonthName(1, False) ' Январь
Debug.Print MonthName(1, True) ' янв
Манипуляции датой и временем
Благодаря тому, что дата и время хранятся в виде вещественного числа, мы можем над двумя значениями выполнять арифметические операции сложения и вычитания. Например, прибавим и вычтем 10 дней:
d = #8/20/2012# + 10
Debug.Print d ' 30.08.2012
d = #8/20/2012# - 10
Debug.Print d ' 10.08.2012
Теперь прибавим и вычтем 10 минут:
d = #8/20/2012# + #12:10:00 AM#
Debug.Print d ' 30.08.2012
d = #8/20/2012# - #12:10:00 AM#
Добавить или вычесть указанный интервал позволяет функция DateAdd()
. Функция возвращает новую дату. Формат функции:
DateAdd(<Интервал>, <Значение>, <Дата>)
В первом параметре задается строка с одним из значений: yyyy
(год), q
(квартал), m
(месяц), y
(день года), d
(день месяца), w
(день недели), ww
(неделя), h
(часы), n
(минуты) и s
(секунды), а во втором параметре — значение интервала. Третий параметр задает начальное значение даты. Пример:
Dim d As Date
d = #8/20/2012 10:48:12 PM#
Debug.Print DateAdd("yyyy", 1, d) ' 20.08.2013 22:48:12
Debug.Print DateAdd("yyyy", -1, d) ' 20.08.2011 22:48:12
Debug.Print DateAdd("q", 1, d) ' 20.11.2012 22:48:12
Debug.Print DateAdd("m", 1, d) ' 20.09.2012 22:48:12
Debug.Print DateAdd("y", 1, d) ' 21.08.2012 22:48:12
Debug.Print DateAdd("d", 1, d) ' 21.08.2012 22:48:12
Debug.Print DateAdd("w", 1, d) ' 21.08.2012 22:48:12
Debug.Print DateAdd("ww", 1, d) ' 27.08.2012 22:48:12
Debug.Print DateAdd("h", 1, d) ' 20.08.2012 23:48:12
Debug.Print DateAdd("n", 1, d) ' 20.08.2012 22:49:12
Debug.Print DateAdd("s", 1, d) ' 20.08.2012 22:48:13
Получить количество интервалов между двумя датами позволяет функция DateDiff()
. Формат функции:
DateDiff(<Интервал>, <Дата1>, <Дата2>[,<Первый день недели>[,
<Первая неделя года>]])
В первом параметре задается строка с одним из значений: yyyy
(год), q
(квартал), m
(месяц), y
(день года), d
(день месяца), w
(день недели), ww
(неделя), h
(часы), n
(минуты) и s
(секунды). В четвертом параметре указывается первый день недели (константы vbMonday
, vbTuesday
, vbWednesday
, vbThursday
, vbFriday
, vbSaturday
, vbSunday
(значение по умолчанию)), а в пятом параметре — первая неделя года (константы vbFirstJan1
(значение по умолчанию), vbFirstFullWeek
, vbFirstFourDays
и vbUseSystem
). Пример:
Dim d As Date
d = #8/20/2012 10:48:12 PM#
Debug.Print DateDiff("yyyy", d, #8/30/2020#) ' 8
Debug.Print DateDiff("q", d, #8/30/2013#) ' 4
Debug.Print DateDiff("m", d, #8/30/2013#) ' 12
Debug.Print DateDiff("y", d, #8/30/2013#) ' 375
Debug.Print DateDiff("d", d, #8/30/2013#) ' 375
Debug.Print DateDiff("w", d, #8/30/2013#) ' 53
Debug.Print DateDiff("ww", d, #8/30/2013#) ' 53
Debug.Print DateDiff("h", d, #8/20/2012 11:48:12 PM#) ' 1
Debug.Print DateDiff("n", d, #8/20/2012 10:50:12 PM#) ' 2
Debug.Print DateDiff("s", d, #8/20/2012 10:48:50 PM#) ' 38
Форматирование даты и времени
Получить форматированный вывод даты и времени позволяют следующие функции:
Format()
— возвращает строковое представление даты в соответствии со строкой формата. Подробное описание функции приведено в разд. 5.6. Пример:
Dim d As Date
d = #8/20/2012 10:48:12 PM#
Debug.Print Format(d, "dd/mm/yyyy") ' 20.08.2012
Debug.Print Format(d, "hh:nn:ss") ' 22:48:12
FormatDateTime(<Дата>[, <Формат>])
— возвращает строковое представление даты в соответствии со значением параметра<Формат>
. Параметр<Формат>
может принимать следующие значения:
vbGeneralDate
— дата в сокращенном формате, а время в полном формате;vbShortDate
— сокращенный формат даты;vbLongDate
— полный формат даты;vbShortTime
— сокращенный формат времени;vbLongTime
— полный формат времени.
Форматы зависят от региональных настроек компьютера. Пример:
Dim d As Date
d = #8/20/2012 10:48:12 PM#
Debug.Print FormatDateTime(d) ' 20.08.2012 22:48:12
Debug.Print FormatDateTime(d, vbGeneralDate)
' 20.08.2012 22:48:12
Debug.Print FormatDateTime(d, vbShortDate) ' 20.08.2012
Debug.Print FormatDateTime(d, vbLongDate) ' 20 Август 2012 г.
Debug.Print FormatDateTime(d, vbShortTime) ' 22:48
Debug.Print FormatDateTime(d, vbLongTime) ' 22:48:12
Засыпание скрипта
В ряде случаев возникает необходимость прервать выполнение скрипта на некоторое время. При этом другие процессы должны выполняться. Произвести данное действие позволяет функция DoEvents()
. В момент вызова функции управление передается операционной системе. Управление возвращается приложению только после обработки всех ожидающих событий.
Создадим процедуру Sleep()
, которая будет приостанавливать выполнение скрипта на указанное в параметре количество секунд:
Sub Sleep(Pause As Integer)
Dim Start
Start = Timer
Do While Timer < Start + Pause
DoEvents
Loop
End Sub
Прервев выполнение программы на 10 секунд и замерим время выполнения:
Debug.Print Timer
Sleep 10 ' "Засыпаем" на 10 секунд
Debug.Print Timer
Изменение системной даты и времени
Изменить системную дату позволяет инструкция Date
. Формат инструкции:
Date = <Новая дата>
Пример:
Date = #9/20/2012#
Для изменения системного времени предназначена инструкция Time
. Формат инструкции:
Time = <Новое время>
Пример:
Time = #11:50:00 PM#
Помощь сайту
Yandex-деньги: 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов