Вторая из используемых функций 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 и имеет те же необязательные аргументы.
Format Percent (число). Умножает число на 100 и добавляет знак процентов (например, 0,05 превращается в 5,00%). Функция Format Percent имеет те же необязательные аргументы, что и функция FormatNumber. Чтобы не выводить знаки дробной части, задайте аргумент ЧислоЗнаковПослеЗапятой равным 0 (например, Format Percent ( .05, 0)).
Как упоминалось в главе 9, VBA автоматически конвертирует данные одних типов в другие "на лету". Такие автоматические преобразования, конечно, удобны, да и получаемые при этом результаты обычно соответствуют желаемым. Правда, при этом нужно обязательно подчеркнуть слово обычно.
Когда автоматическое преобразование вас не устраивает, VBA готов предложить массу функций для явного преобразования данных одних типов в другие. Эти функции можно использовать для того, чтобы
* быть уверенным, что VBA выполняет именно то преобразование, которое нужно;
* выполнить преобразования, которые не выполняются в VBA автоматически;
* сделать свой программный код яснее.
Для конвертирования данных в VBA предусмотрена целая группа функций - CBool, Cbyte, CCur и т.д. - своих для каждого из встроенных типов данных, за исключением Object. Например, в результате выполнения оператора boolMaybe = CBool (123) переменная bool Maybe будет содержать значение True (вообще любое число, не равное нулю, в результате даст True, наверное потому, что любое такое число ассоциируется с чем-то существующим).
Читать дальше