VBA для чайников
Шрифт:
В упрощенной форме синтаксис функции Format выглядит так (здесь опущены два необязательных и редко используемых аргумента, относящихся к датам, - о них вы можете узнать из справки VBA):
Format(выражение,"формат")
Аргумент выражение должен содержать выражение, представляющее число, строку или дату, которые вы хотите форматировать (т.е. отобразить в подходящей форме). Ясно, что этот аргумент обязателен.
Аргумент формат и является тем аргументом, который выполняет реальную работу. Как видно из следующего примера, аргумент формат нужно заключить в кавычки.
Чтобы использовать функцию Format, присвойте ее переменной либо свойствам Value или Caption элемента управления в форме. Например, оператор
lblDateMessage.Caption = "Сегодня " & _
Format(Now, "Long Date")
отображает текст "Сегодня 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 |
Можно создать свои собственные форматы, собрав их из символов, имеющих специальные
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 возвращает до обеда, а если Ложь, то после обеда.
В VBA 6 были добавлены несколько функций, подобных функции Format, - Format Number, Format DateTime, Format Currency и Format Percent - для работы сданными соответствующих типов. Подобно оригинальной функции Format, каждая из этих функций-наследниц возвращает строку с форматированным представлением исходного значения. Ввиду того, что эти новые функции по умолчанию возвращают результаты, нужные вам чаще всего, эти функции могут оказаться в использовании удобнее, чем сама функция Format. Вкратце их работу можно описать следующим образом.
* FormatNumber(число,ЧислоЗнаковПослеЗапятой, ОтображатьНезначащийНуль, ИспользоватьСкобкиДляОтрицательныхЧисел, ГруппироватьРазряды). Возвращает значение числа- единственного обязательного аргумента- в виде форматированной строки. Если опустить необязательные аргументы, функция FormatNumber отформатирует число на основе установок по умолчанию, заданных на вкладке Числа окна контрольной панели Язык и стандарты Windows. В предположении, что языком Windows выбран русский, вы получите число вида 132 328,55. Необязательные аргументы функции FormatNumber позволяют изменить заданные по умолчанию значения для числа знаков после запятой, отображения незначащего нуля перед запятой для чисел, меньших 1, представления отрицательных чисел в скобках и отделения групп разрядов одной от другой (например, пробелами).
* Format DateTime (дата, формат). Конвертирует значение даты в форматированную строку. Если аргумент формат не указан, строка форматируется в соответствии с системными установками для краткого формата даты и длинного формата времени, заданными на вкладках Дата и Время панели управления Язык и стандарты Windows. Здесь аргумент формат является числом (а не строкой, как в функции Format), но его можно задавать, используя именованные константы вида vbLongDate или vbShort Time.
* Format Currency (число). Возвращает значение числа, отформатированного как денежное, в соответствии с текущими установками в панели управления. В остальном функция Format Currency работает подобно функции FormatNumber и имеет те же необязательные аргументы.