Функция Format предлагается и в VBA 5, и в VBA 6, однако VBA 6 может похвастать еще четырьмя новыми родственными функциями, каждая из которых предназначена для своего конкретного типа данных.
Работа с функцией Format
Функция Format, имеющаяся в VBA 5 и VBA 6,- невероятно гибкая. Она применима практически к любым типам данных и имеет настраиваемый вывод- если ни один из встроенных форматов не подойдет, вы можете создать свой, какой пожелаете.
В упрощенной форме синтаксис функции Format выглядит так (здесь опущены два необязательных и редко используемых аргумента, относящихся к датам, - о них вы можете узнать из справки VBA):
Format(выражение,"формат")
Аргумент выражение должен содержать выражение, представляющее число, строку или дату, которые вы хотите форматировать (т.е. отобразить в подходящей форме). Ясно, что этот аргумент обязателен.
Аргумент формат и является тем аргументом, который выполняет реальную работу. Как видно из следующего примера, аргумент формат нужно заключить в кавычки.
Чтобы использовать функцию Format, присвойте ее переменной либо свойствам Value или Caption элемента управления в форме. Например, оператор
lblDateMessage.Caption = "Сегодня " & _
Format(Now, "Long Date")
отображает текст "Сегодня 19 март 2001 г." в виде текста надписи элемента управления lblDateMessage (в предположении, что сегодня 19 марта 2001 года).
Использование встроенных форматов для функции Format
В табл. 11.2 приводятся именованные встроенные форматы для данных различных типов в VBA. Используйте их как аргумент в функции Format. He забудьте при этом заключить в кавычки имя выбранного вами формата (из первого столбца таблицы).
Таблица 11.2. Именованные форматы для использования с функцией Format
|
Имя формата |
Описание вывода |
Пример (соответствует установке языка Русский в панели управления) |
|
Числовой |
||
|
General Number |
Число без выделения разрядов тысяч |
2001,5599 |
|
Currency |
Число с выделением разрядов тысяч и с двумя знаками после десятичного разделителя, а также с символом денежной единицы |
2 001,56р. |
|
Fixed |
Как минимум один знак слева и два знака справа от десятичного разделителя (без выделения разрядов тысяч) |
3390,10 |
|
Standard |
Число с выделением разрядов тысяч и как 1 минимум одним знаком слева и двумя знаками справа от десятичного разделителя |
323,45 |
|
Percent |
Число, умноженное на 100, с двумя знаками справа от десятичного разделителя и знаком процентов (%) справа |
12,54% |
|
Scientific |
Число в стандартном виде для научных расчетов |
1,23Е+02 |
|
Логический |
||
|
Yes/No |
Нет, если значение равно 0, иначе Да |
Да |
|
True/False |
Ложь, если значение равно 0, иначе Истина |
Истина |
|
On/Off |
Выкл, если значение равно 0, иначе Вкл |
Вкл |
|
Дата/время |
||
|
General Date |
Дата и/или время, в зависимости от значения, представленного в соответствии с установками в панели управления |
15.03.9817:27:45 |
|
Long Date |
Дата в виде, заданном в панели управления для полного формата даты |
15 Март 2001 г. |
|
Medium Date |
Дата в виде, заданном в панели для среднего формата даты |
управления 15-мар-01 |
|
Short Date |
Дата в виде, заданном в панели управления для краткого формата даты |
15.03.01 |
|
Long Time |
Время (часы, минуты и секунды) в виде, заданном в панели управления для полного формата времени |
17:27:45 |
|
Medium Time |
Время (часы и минуты) в 12-часовом формате с метками до/после полудня, заданными в панели управления |
05:27 |
|
Short Time |
Время (часы и минуты) в 24-часовом формате |
17:27 |
Можно создать свои собственные форматы, собрав их из символов, имеющих специальные значения для аргумента формат. Например, чтобы отобразить строки текста символами верхнего или нижнего регистров, используйте функцию Format с аргументами ">" или "<" соответственно. За неимением места я не могу описывать все эти специальные символы- вы найдете их самостоятельно, открыв сначала раздел Format Function (функция Format ) в файле справки VBA, а затем щелкнув на ссылке See Also (см. также) и просмотрев разделы User-defined Formats (пользовательские форматы). Но чтобы не совсем вас разочаровывать, я привожу следующий пример с парой пользовательских форматов в действии. Кроме того, этот же пример иллюстрирует использование еще одной встроенной функции VBA - Iif:
MsgBox "Сейчас " & Format(Now, "h:nn") & _
". Это время " & Iif(Format(Now, "a/p") = "a", _
"до обеда.", "после обеда.")
Если вы выполните этот программный код до обеда, оператор отобразит на экране строку типа "Сейчас 9:07. Это время до обеда". После обеда вы получите нечто похожее на сообщение, показанное на рис. 11.1. (Кстати, функция MsgBox обсуждается ниже в этой же главе в разделе "Отображение окон сообщений".)
Рис. 11.1. Окно сообщения
Теперь объяснения. В первой функции Format аргументом формат является "h:nn".
Символ h соответствует стандарту отображения часа одной цифрой, когда имеется в виду время до 10:00. После двоеточия пп задает отображение минут с незначащим нулем, если прошло меньше 10 минут после начала часа.
Вторая из используемых функций Format вложена в функцию Iif. Ввиду того, что аргументом формат в данном случае является "а/р", возвращаемыми значениями будут просто либо "а", либо "р", в зависимости от того, превышает время 12 часов дня или нет. Обычно а/р используется как компонент более длинной строки аргумента формат, но в данном случае результат функции видеть не требуется, и он обрабатывается функцией Iif.
Функция Iif - это миниатюрная версия оператора If... Then (обсуждаемого в деталях в главе 32). Синтаксис этой функции следующий:
Iif (выражение, результатЕслиИстина, результатЕслиЛожь)
В переводе на "человеческий" язык функция работает следующим образом: если выражение есть истина, то функция возвращает значение результатЕслиИстина, если же выражение есть ложь, то возвращается значение результатЕслиЛожь.
В прелыдущем примере выражением для проверки было
Format(Now, "а/р") = "а"
Поэтому если функция Format возвращает значение а, данное выражение есть Истина.
Если же она возвращает любое другое значение, включая р, то выражение есть Ложь. Затем VBA вычисляет результат функции Iif на основе того, является ли значение выражения истиной или ложью. Если это значение Истина, функция Iif возвращает до обеда, а если Ложь, то после обеда.