VBA для чайников - Стив Каммингс
Шрифт:
Интервал:
Закладка:
Таблица 11.4. Операторы и функции для работы с датами и временем
При задании аргументов не забывайте заключать буквальные значения дат в пару символов #, а строковые значения типа интервалов дат - в кавычки.
Имя
Тип
Выполняемые действия (для операторов) или возвращаемые значения (для функций)
Date
Функция
Текущая системная дата
Date (дата)
Оператор
Устанавливает системную дату по значению аргумента дата
DateAdd (интервал, число, дата)
Функция
Новое значение даты, равное сумме исходной даты и казенного числа заданных интервалов даты или времени
DateDiff (интервал, дата1, дата2)
Функция
Число указанных интервалов даты или времени, помещающихся в отрезке времени между датами 1 и 2
DatePart (интервал, дата)
функция
Целое значение, представляющее указанный интервал даты
DateSerial (год, месяц, день)
Функция
Значение даты, определяемое аргументами год, месяц, день, которые должны быть числовыми
DateValue (строка с датой)
Функция
Значение даты, соответствующее строке с датой
Day (дата)
Функция
Целое значение, соответствующее дню месяца, заданного датой
Hour (время)
Функция
Целое значение между 0 и 23 включительно, представляющее час суток, заданный указанным временем
Minute (время)
Функция
Целое значение между 0 и 59 включительно, представляющее минуты, заданные указанным временем
Month (дата)
Функция
Целое значение между 0 и 12 включительно, представляющее месяц, заданный указанной датой
MonthName (месяц, сократить)
Функция (только в VBA 6)
Строка, содержащая название месяца, соответствующего аргументу месяц, который должен быть числом от 1 до 12. Если необязательный аргумент сократить указан и равен True, то возвращаемая строка будет содержать сокращенное название месяца
NOW
Функция
Значение, представляющее текущие системные дату и время
Second(время)
Функция
Целое значение между 0 и 59 включительно, представляющее секунды, заданные указанным временем
Time
Функция
Значение, представляющее текущее системное время
Time (время)
Оператор
Устанавливает системное время по значению аргумента время
Timer
Функция
Число секунд, прошедших с полуночи
TimeSerial (часы, минуты, секунды)
Функция
Значение времени, заданное аргументами часы, минуты, секунды
TimeValue (строка_с_временем)
Функция
Значение времени, соответствующее строке со временем (вся информация о дате будет отброшена)
Weekday (дата)
Функция
Целое число, представляющее день недели, соответствующий указанной дате
WeekdayName
(день_не дели, сократить, первый день недели)
Функция
Строка, содержащая название дня недели, заданного (только в аргументом де н ь _ н е де л и, который должен
VBA 6) быть целым числом от 1 до 7. Если необязательный аргумент с о к р а т и т ь указан и равен True, то возвращаемая строка будет содержать сокращенное название дня недели. Нумерацию дней недели можно менять, задавая необязательный аргумент первый _ день _ недели равным константам типа vbMonday, vbTuesday и т.д.
Year(дата)
Функция
Целое число, представляющее год, соответствующий указанной дате
В VBA есть несколько простых операторов и функций для работы с системной датой и системным временем, т.е. со значением даты и времени, которое изменяется и хранится встроенными часами компьютера.
Функция Now возвращает текущие системные дату и время в формате переменной типа Data, как, например, в случае datЛовиМомент = Now.
Чтобы обеспечить работу с системным временем и системной датой по отдельности, VBA предлагает по паре отдельных команд для каждого из этих двух элементов системы. Несколько неожиданным при этом оказывается то, что в каждой из пар и оператор, и функция имеют одинаковые имена.
Например, чтобы извлечь (т.е. получить) системное время в формате даты VBA, нужно использовать функцию Time, а чтобы установить (т.е. задать) системное время, необходимо использовать оператор Time. Другими словами, ключевое слово Time выполняет различные действия в зависимости от контекста:
datЭтоMoeBpeмя = Time ' функция Time возвращает значение
' системного времени
Time (113:15 АМ#) ' оператор Time устанавливает системное время
Подобным образом работают и различаются соответствующие функции Date и оператор Date.
Исчисление дат
Как вы знаете, время - понятие относительное. Поэтому главное - получить дату и время в таком виде, чтобы сравнить их с другими датами и временем. Иногда нужно знать, как далеко отстоят одна дата от другой или одно время от другого. А иногда бывает нужно знать, какая дата будет, скажем, через два года и три месяца. Несколько предлагаемых в VBA функций для обработки значений дат и времени превращают вычисления с датами в совсем простое дело.
Используйте функцию DateAdd, когда нужно узнать, какая дата наступит через три года или что было на часах один час и пятнадцать минут тому назад. Такие вычисления можно выполнить и без компьютера вообще, но они требуют особой внимательности, поскольку операции с компонентами значений дат и времени не подчиняются правилам привычной арифметики десятичных чисел (дней недели - 7, секунд - 60, и т.д.), да и самих компонентов наберется немало.
Функция DateAdd имеет следующий синтаксис: DateAdd (интервал, число, начальная_дата).
Возвращаемое функцией значение равно значению, полученному в результате добавления к начальной дате (или начальному времени) заданного числа интервалов. Если нужна разность, а не сумма, задайте для аргумента число отрицательное значение. В табл. 11.5 приведен набор символьных кодов, которые допустимы для аргумента интервал (при использовании не забудьте заключить соответствующий код в кавычки).
Таблица 11.5. Значения аргументов функций DateAdd и DatDiff
уууу Год
q Квартал
rа Месяц
у День года
d День
w День недели
ww Неделя
h Час
n Минута
s Секунда
Например, в результате выполнения оператора
datБыло = DateAdd ("s", -90, Now)
переменная datБыло будет содержать значение, соответствующее времени, которое было 90 секунд тому назад относительно текущего времени. Если вам нужно отобразить на экране только ту часть этого значения, которая относится ко времени, используйте функцию Format с соответствующим времени аргументом форматирования (например, Format (datБыло, "Medium time ")), как было описано в разделе "Форматирование данньк".
При этом функция DateAdd не возвращает недопустимых значений дат: если добавить один месяц к дате 31 августа, то результатом будет 30 сентября. Точно так же функция DateAdd не забудет, если нужно, изменить в результате и год.
С помощью функции DateAdd можно добавлять или вычитать некоторое число однотипных интервалов, но, например, для выяснения даты, которая была два года и три месяца назад, ничто не мешает применить эту функцию дважды.
В качестве альтернативы VBA предлагает для дат и времени две другие функции, которые позволяют смешивать интервалы,- Date Serial и TimeSerial. Каждая из этих функций имеет по три аргумента;
DateSerial (год, месяц, день]
TimeSerial (часы, минуты, секунды)
Все аргументы в данном случае обязательны и должны быть выражениями, дающими целые значения (а не значения типа Date). Посмотрите, можете ли вы сказать, что будет получено в результате выполнения следующего фрагмента программного кода, и обратите внимание на вычисления в третьем аргументе:
intГод = 1999
intМесяц = 12
intДень = 3 1
datНовоеТысячелетие = DateSerial (intГод, intМесяц, intДень + 1)
И, конечно же, любые из этих аргументов или даже все могут быть просто числами.
Используйте функцию DateDiff, чтобы выяснить, сколько определенных интервалов времени (годы, месяцы, недели и т.п.) помещается между двумя заданными датами или моментами времени. Например:
lngСколько = DateDiff ("m", #2/12/90#, #10/12/01#)
В результате выполнения этого оператора переменная lngСколько - переменная типа Long - будет содержать число месяцев, прошедших между двумя указанными датами. Для первого аргумента функция DateDiff требует код интервала времени, и в данном случае "m" сообщает функции о том, что нужно измерять в месяцах, а не в годах, неделях или каких-либо других единицах.