К значению, возвращенному функцией InStr, добавляется 2, чтобы пропустить запятую и следующий за ней пробел и найти позицию, с которой начинается имя. Теперь функция Mid извлечет символы, начиная с этого места и до конца строки (поскольку не указан третий, необязательный аргумент длина).
В реальном программировании работе с датами и временем отводится далеко не последняя, а часто и главная роль. Поэтому VBA предлагает ряд операторов и функций, позволяющих выяснить текущие время и дату, проводить вычисления с датами и извлекать из переменных со значениями дат различные компоненты типа времени, года или дня недели.
В табл. 11.4 представлено описание таких команд. У некоторых функций в этой таблице опущены необязательные аргументы - вы всегда сможете уточнить детали по справке VBA.
После таблицы несколько наиболее важных команд, относящихся к датам и времени, рассматриваются подробнее.
Чтобы воспользоваться предоставляемым здесь материалом, вы должны ясно представлять, как VBA обрабатывает значения дат и времени и как работать с переменными, хранящими даты (см. главу 7).
Таблица 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 (интервал, число, начальная_дата).