ChDir("Отчеты о мечтаниях ")
* Функции. Встроенные функции работают точно так же, как и процедуры типа Function, обсуждавшиеся в главе 7,- в том смысле, что они возвращают значение. Использование функции часто заключается в присваивании ее значения переменной, как в следующем примере с функцией Tan (тангенс):
dblТангенс = Tan (dblЛюбойУгол)
Функции могут также обеспечивать значения для более сложных выражений или условных операторов, например:
If Tan (dblОстрыйУгол) < 45 Then
* Методы встроенных объектов. В этой группе курьезно выглядит метод Print, единственный для объекта Debug и предназначенный для направления вывода в окно немедленного выполнения команд (окно Immediate) в редакторе Visual Basic. Для этого используются операторы типа
Debug.Print (strПосланиеМарсианина)
* Лично я не вижу никаких преимуществ в связывании команды Print с объектом, но сам по себе метод Print оказывается очень полезным. Подробно он обсуждается в главе 14. Здесь же замечу, что, хотя VBA и не инкапсулирует файлы, как объекты, можно дополнительно установить программную надстройку, которая позволит управлять файлами и работать с их содержимым на основе объектно-ориентированного подхода (подробности - в главе 12).
В табл. 11.1 приводятся некоторые из встроенных VBA-команд, взятые для примера и относящиеся к различным категориям (операторы, функции, методы). Дальше в главе будут рассматриваться чаще всего используемые встроенные команды.
Таблица 11.1. Примеры встроенных функций, операторов и методов
Команда
Тип
Выполняемые действия
Randomize
Оператор
Инициализирует генератор случайных чисел
Sqr ( число)
Функция
Возвращает значение квадратного корня числа
Format ( строка )
Функция
Форматирует строку в соответствии с заданным описанием
Date
Оператор
Устанавливает системную дату
Date
Функция
Возвращает текущую системную дату
Err . Raise
Метод объекта Err
Генерирует ошибку выполнения с заданным кодом данных
Форматирование данных
VBA-функции Format форматируют данные любого из встроенных типов по указанному образцу для отображения их на экране или на печати. С помощью этих функций очень просто отображать значения дат в виде короткого (19.12.99), среднего (19-дек-99) или длинного формата даты (19 декабря 1999 г.), или любого из нескольких других предлагаемых VBA форматов (VBA хранит значения дат в виде совершенно неудобоваримых чисел). Подобные трюки можно выполнять и с числовыми значениями, и со строками. На самом деле Format конвертирует предложенное вами значение в новую строку, добавляя в нее символы, необходимые для представления данных в нужном виде.
Функция 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.