VBA для чайников
Шрифт:
* 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, наверное потому, что любое такое число ассоциируется с чем-то существующим).
Замечу, однако, что, кроме превращения самой операции конвертирования в явную, эти функции не делают ничего такого, что не может предложить VBA при автоматическом конвертировании. (Об особенностях функции СDec см. в главе 9.)
Функции Fix и intотбрасывают дробную часть любого заданного им числа, возвращая целое число. Но, в отличие от функций CInt и CLng, они не выполняют привычного округления - например, int(4 . 98 9) возвращает 4, а не 5.
Результаты этих двух функций отличаются только при обработке отрицательных чисел.
Тогда intвозвращает ближайшее к значению аргумента меньшее целое число, a Fix просто отбрасывает дробную часть аргумента.
Функции Hex и Oct преобразуют стандартные десятичные целые числа в строки, содержащие соответственно их шестнадцатеричные и восьмеричные эквиваленты.
Возможность явного конвертирования в обратном направлении в VBA не предусмотрена, но зато вы можете напечатать буквальные шестнадцатеричные или восьмеричные значения и позволить редактору Visual Basic превратить их в десятичные автоматически. При этом любой шестнадцатеричный или восьмеричный литерал должен предваряться специальным кодом: шестнадцатеричный – кодом &Н, а восьмеричный - кодом &О (это буква О, а не цифра 0). Например, в результате выполнения оператора intBas es = 10+&О12 + &НА значением переменной intBases будет число 30, как и должно быть (это очевидно).
Некоторые функции VBA конвертируют числа в строки. К таким функциям относятся следующие.
* CStr. Превращает данные любых типов (кроме типа Object ), включая числовые, в соответствующую им строку. Вывод форматируется в соответствии с установками заданными в панели управления Язык и стандарты Windows. Например, во Франции CStr ( 200.02) на выходе выдаст строку "200, 02". Здесь следует заметить, что хотя результирующая строка и соответствует региональным установкам, подаваемые на вход числовые данные должны быть представлены в формате, соответствующем английскому языку США.
* Str. Конвертирует число в строку, но всегда форматирует строку в соответствии со стандартом английского языка США с точкой в качестве десятичного разделителя.
* Функции конвертирования в числовые типы данных. Конвертируют строки в соответствующие числовые значения, но только тогда, когда все символы в строке распознаются как допустимые для чисел. В данном случае тоже все зависит от установок в панели управления. Например, в России CDbl ("200, 02р. ") в результате дает 200, 02; в США тот же оператор порождает ошибку, но CDbl ( "$200 . 02" ) прекрасно работает.
* Val. Конвертирует числа в строках в числовые значения, останавливаясь там, где встречается первый символ, недопустимый для чисел. Независимо от установок панели управления, распознает только цифры и десятичную точку (а не запятую, например). Однако игнорирует пробелы, символы табуляции и переходы на новую строку.
Так, выражение Val ("28 190.43 12 by 14 ") в результате даст 28190,4312.
Chr. Конвертирует числовой ANSI-код в соответствующий символ. Используйте эту функцию, когда в строку нужно поместить символ, который нельзя напечатать.
Asc. Примерно соответствует обратной к функции Chr - возвращает числовой код первого символа в строке.
Работа со строками
В VBA имеется довольно богатая коллекция операторов и функций для форматирования строк и извлечения тех их частей, которые вы сочтете особенно привлекательными. В табл. 11.3 я представил все относящиеся к строкам команды, которые мне удалось обнаружить.
Таблица 11.3. Операторы и функции для обработки строк
Не забывайте, что буквальные строковые значения (в отличие от переменных, содержащих строковые значения) должны заключаться в кавычки.
Оператор или функция | Тип | Выполняемые действия (для операторов) или возвращаемые значения (для функций) |
Asc (строка) | Функция | Числовой код первого символа в строке |
Chr (код_символа) | функция | Символ, соответствующий значению параметра код_символа |
Filter ( массив_источник, эталон, включает, метод сравнения) | Функция (только в VBA6) | Массив, состоящий только из тех строк из массива источника, которые содержат эталон. Аргумент массив_истчник должен быть массивом строковых значений. Если необязательный аргумент включает равен False, то функция возвратит только строки, которые не включают эталон |
Format (строка) | Функция | См. выше раздел "Форматирование данных" |
Hex (число) | Функция | Строка, содержащая шестнадцатеричное представление числа |
InStr (старт, строка1, строка2) | Функция | Число, соответствующее позиции строки 2 в строке 1; поиск начинается с позиции старт, этот аргумент не обязателен |
InStrRev (строка 1, строка2, старт) | функция (только в VBA6) | Число, соответствующее позиции строки 2 в строке 1, считая с правого края строки 1; поиск начинается с позиции старт, этот аргумент не обязателен |
Join (массив_строк, разделитель) | функция (только B VBA6) | Одна строка, комбинирующая все строки из массив_строк, который должен быть массивом строковых данных. По умолчанию Join вставляет пробел между строками, взятыми из массива строк, но можно задать и другой символ разделителя (символ необходимо заключить в кавычки) |
Left (строка, длина) | Функция | Строка указанной длины из символов, взятых подряд из строки, задаваемой аргументом строка, начиная с левого края последней |
Len (строка) | Функция | Число символов в строке |
LCase (строка) | Функция | Копия строки, представленная символами нижнего регистра |
LSet строковая_ переменная = строка | Оператор | Устанавливает значение строковой переменной, равное заданной строке, без изменения длины этой строковой переменной и с размещением заданной строки начиная с левого края переменной |
LTrim (строка) | Функция | Новая строка, содержащая копию данной строки без пробелов в начале |
Mid(строка, старт, длина) | Функция | Новая строка заданной длины из символов данной строки, взятых подряд, начиная с позиции старт |
Mid(строковая переменная, старт, длина) = строка | Оператор | Начиная с позиции старт заменяет символами данной строки заданное аргументом длина число символов в строковой переменной |
Oct(число) | Функция | Строка, содержащая восьмеричное представление числа |
Replace(строка, найти, заменить, старт, число_замен, метод_сравнения) | Функция (только в VBA6) | Новая строка, получаемая в результате замены в заданной строке текста найти текстом заменить. Аргументы старт, число_замен и метод_сравнения не обязательны. Используйте число_замен, чтобы указать, сколько замен следует сделать, если текст найти встречается несколько раз (по умолчанию заменяются все случаи появления текста найти в строке) |
Right (строка, длина) | Функция | Строка указанной длины из символов, взятых подряд из строки, задаваемой аргументом строка, начиная с правого края последней |
RSet строковая_ переменсная = строка | Оператор | Устанавливает значение строковой переменной, равное заданной строке, без изменения длины этой строковой переменной и с размещением заданной строки с правого края переменной |
RTrim (строка) | Функция | Новая строка, содержащая копию данной строки без пробелов в конце |
Space (число) | Функция | Строка, состоящая из указанного числа пробелов |
Split(строка, разделитель, предел, метод сравнения) | Функция (только B VBA6) | Массив строк, полученный в результате разделения в заданной строки. По умолчанию оригинальная строка разделяется по пробелам, но можно задать разделитель, отличный от пробела (для задания разделителя используйте символ, заключенный в кавычки). Необязательный аргумент предел задает максимальное число строк в возвращаемом массиве |
StrComp(строка1, строка2) | Функция | О, если две строки равны; -1,если строка 1 меньше, чем строка 2; 1, если строка! больше, чем строка 2 (о сравнении строк говорилось в главе 9) |
StrConv(строка, метод перевода) | Функция | Новая строка, созданная на основе заданной указанным методом перевода |
String(число, символ) | Функция | Строка, состоящая из заданного числа повторяющихся символов |
StrReverse (строка) | Функция(только VBA 6) | Строка, содержащая символы заданной строки в обратном порядке |
Trim(строка) | Функция | Новая строка, содержащая копию данной строки без пробелов в начале и конце |
UCase(строка) | Функция | Копия строки, представленная символами верхнего регистра |
Не расстраивайтесь, если не обнаружите строковую функцию, которая делает в точности то, что вам нужно. Воспринимайте эти функции как строительные блоки - часто для достижения нужного результата эти функции приходится вкладывать одну в другую.
Представим, например, что у вас есть список полных имен в виде следующих строк:
"Самодур, Иван Акакиевич, акад."
"Невеселый, Степан Федорович, проф."
"Шутник, Василий Степанович, канд."