Примеры использования функций VBA
Удаление ненужных символов
Зачастую строки в программе содержат ненужные символы пробелов в конце или в начале строки, которые необходимо удалить, т.к. посторонние начальные или конечные пробелы в строке могут вызвать "неполадки" в работе программы.
В VBA имеются три функции, предназначенные для удаления начальных и конечных пробелов из строки: LTrim, RTrim, Trim. Следует иметь ввиду, что эти функции на самом деле не изменяют исходную строку, а возвращают копию строки с удаленными лишними пробелами.
![](img/lsn0107_1.jpg)
Определение длины строки
Длину строки, как правило, надо знать при форматировании сообщений для пользователя или при форматировании строковых данных, вводимых процедурой в рабочий лист Excel или документ Word. VBA для этих целей использует функцию Len. В приведенным ниже листинге между знаками круглых скобок и словом присутствует по два пробела.
![](img/lsn0107_2.jpg)
Следует быть внимательными со строками фиксированной длины. Поскольку строка фиксированной длины имеет всегда одну и ту же длину, функция Len всегда возвращает объявленную длину строки, независимо от фактической длины строки. Например, если в строковой переменной фиксированной длины StrokeName, имеющей длину 15 символов, фактически находится слово "солнце", то функция Len(StrokeName) возвратит результат 15. Чтобы в таком случае узнать фактическую длину строки (в нашем случае - 6), необходимо использовать следующую комбинацию функций: Len(Trim(StrokeName)).
Сравнение и поиск строк
В VBA имеются две функции, помогающих сравнивать строки: StrComp, InStr.
Функция StrComp
Синтаксис
StrComp (String1, String2 [, Compare])
String1, String2 - любые два строковых выражения, которые необходимо сравнивать.
Compare - необязательный аргумент, может быть любой из следующих предопределенных констант (если он опускается, то используется текущая установка Option Compare):
- vbBinaryCompare - бинарное сравнение двух строк;
- vbTextCompare - текстовое сравнение двух строк;
- vbDatabaseCompare - используется только в Microsoft Access.
При выполнении StrComp возвращается одно из следующих значений:
- -1, если String1 меньше String2;
- 0, если String1 и String2 равны;
- 1, если String1 больше String2.
![](img/lsn0107_3.jpg)
В вышеприведенном листинге в текстовом режиме сравниваются две строки: "Строка по умолчанию" и " Строка по умолчанию". Результат сравнения = 1, т.е. "Строка по умолчанию" больше, чем " Строка по умолчанию".
Поэкспериментируйте с разнообразными строками для лучшего понимания работы функции StrComp.
Функция InStr
Функция InStr дает возможность определить, содержит ли одна строка другую строку.
Синтаксис
StrComp ([Start, ] String1, String2 [, Compare])
String1, String2 - любые допустимые строковые выражения. Функция проверяет содержится ли String1 в String2.
Compare - необязательный аргумент, может быть любой из следующих предопределенных констант (если он опускается, то используется текущая установка Option Compare):
- vbBinaryCompare - бинарное сравнение двух строк;
- vbTextCompare - текстовое сравнение двух строк;
- vbDatabaseCompare - используется только в Microsoft Access.
Start - необязательный аргумент, является численным выражением и указывает положение символа в String1, с которого должна начинаться проверка.
InStr возвращает число, обозначающее положение символа в String1, где было обнаружено String2. Если InStr не находит String2 в String1, то возвращается 0. Если String1 (или String2) имеет значение Null, то функция также возвращает Null.
![](img/lsn0107_4.jpg)
Разбиение строки
Иногда возникает необходимость разбиения строки на составляющие части. В VBA эту задачу решают три функции: Left, Right, Mid.
Функция Left
Синтаксис
Left (String, Length)
String - любое допустимое строковое выражение.
Length - любое численное значение.
Функция возвращает копию String, начиная с первого символа и включая количество символов, заданных с помощью Length. Если Length является числом, большим, чем фактическая длина String, то возвращается все строковое выражение String.
Функция Right
Синтаксис
Right (String, Length)
String - любое допустимое строковое выражение.
Length - любое численное значение.
Функция возвращает копию String, начиная с последнего символа и включая справа налево количество символов, заданных с помощью Length. Если Length является числом, большим, чем фактическая длина String, то возвращается все строковое выражение String. Функция Right всегда копирует символы от конца строки к ее началу.
Функция Mid
Синтаксис
Mid (String, Start, [, Length])
String - любое допустимое строковое выражение.
Length, Start - любые численные значения.
Функция Mid возвращает копию String, начиная с положения символа в String, задаваемого с помощью аргумента Start . Необязательный аргумент Length определяет количество копируемых в Mid символов из String. Если Start содержит большее число, чем фактическая длина String, то возвращается пустая строка.
![](img/lsn0107_5.jpg)
Символы, которые нельзя ввести с клавиатуры
Зачастую случается, что надо ввести какой-либо символ, для которого отсутствует клавиша на клавиатуре (например, символ копирайта). Другая ситуация - когда надо в строку включить служебный символ VBA (самый распространенный случай - включение двойных кавычек).
Чтобы включить в строку символы, которые невозможно ввести с клавиатуры, или которые имеют особое значение для VBA, используется функция Chr.
Синтаксис
Chr (Charcode)
Charcode - любое численное выражение, являющееся допустимым кодом для набора символов, используемого компьютером. Должен быть целым числом от 0 до 255.
Функция Chr принимает код отдельного символа в качестве аргумента и возвращает строку, содержащую соответствующий этому коду символ. Данная функция использована в вышеприведенных листингах для перевода строки при выводе сообщения на экран Chr (13).
Поскольку символы, используемые для начала новой строки, являются очень важными при форматировании сообщений и других строковых данных, которыми манипулируют VBA-процедуры, имеется несколько предопределенных констант для этих символов, чтобы не было необходимости использовать функцию Chr:
- vbCr - символ возврата каретки. Эквивалент Chr(13)
- vbLf - символ смещения на одну строку. Эквивалент Chr(10)
- vbCrLf - символ возврата каретки+смещения на одну строку. Эквивалент Chr(13)+ Chr(10)
- vbTab - символ табуляции. Эквивалент Chr(9)
Для просмотра списка код-символ надо открыть справочную систему VBA и по запросу "character sets" будет представлена соответствующая таблица.
![](img/lsn0107_6.jpg)
![](img/lsn0107_7.jpg)
Форматирование значений данных
Очень часто формат данных на выходе программы по тем или иным причинам нас не совсем устраивает. Эту задачу решает функция Format.
VBA-функция Format идентична функции Format в Excel и использует те же символы-заполнители форматирования данных.
Синтаксис
Format (Expression [, Format[, Firstdayofweek [, Firstweekofyear]]])
Expression - любое допустимое выражение (обязательный аргумент).
Format - допустимое выражение именованного или определенного пользователем формата.
Firstdayofweek - константа, которая определяет первый день недели.
Firstweekofyear - константа, которая определяет первую неделю года.
Чтобы использовать функцию Format, надо либо задать предопределенный формат, либо создать образ определенного формата, используя символы-заполнители.
![](img/lsn0107_8.jpg)
Именованные форматы для использования с функцией Format
Именованный формат | Действие |
General Date | Форматирует информацию о дате и времени в последовательное число даты, используя установки формата даты и времени для данного компьютера. |
Long Date | Форматирует в последовательной дате только часть, содержащую дату, используя установки компьютера для Long-формата даты. |
Medium Date | Форматирует в последовательной дате только часть, содержащую дату, используя установки компьютера для Medium-формата даты. |
Short Date | Форматирует в последовательной дате только часть, содержащую дату, используя установки компьютера для Short-формата даты. |
Long Time | Форматирует в последовательной дате только часть, содержащую время, используя установки компьютера для Long-формата времени. |
Medium Time | Форматирует в последовательной дате только часть, содержащую время, используя установки компьютера для Medium -формата времени. |
Short Time | Форматирует в последовательной дате только часть, содержащую время, используя установки компьютера для Short -формата времени. |
General Number | Форматирует число в строку без каких-либо особых символов. |
Currency | Форматирует число с символом денежной единицы, разделителем тысяч и только двумя десятичными разрядами. |
Fixed | Форматирует число так, чтобы всегда была, по крайней мере, одна цифра перед десятичным разделителем и, по крайней мере, две цифры после него. |
Standart | Форматирует число с разделителем тысяч так, чтобы была, по крайней мере, одна цифра перед десятичным разделителем и, по крайней мере, две цифры после него. |
Percent | Форматирует число как процентное отношение, умножая его на 100 и добавляя символ процента. |
Scientific | Форматирует число в обычный экспоненциальный формат. |
Yes/No | Возвращается строка "Да" если форматируемое число ненулевое, иначе - "Нет". |
True/False | Возвращается строка "Истина" если форматируемое число ненулевое, иначе - "Ложь". |
On/Off | Возвращается строка "Вкл" если форматируемое число ненулевое, иначе - "Выкл". |
Символы-заполнители для создания пользовательских форматов
Символ-заполнитель | Действие (в качестве примера используется число 1234.45) |
0 | Цифровой символ, отображает цифру, если таковая находится в этой позиции, или 0, если - нет. Можно использовать символ 0 для отображения начальных нулей для целых чисел и конечных нулей в десятичных дробях: 00000.000 отображает 01234.450 |
# | Цифровой символ, отображает цифру, если таковая находится в этой позиции, иначе - не отображает ничего. Символ-заполнитель # эквивалентен 0, кроме того, что начальные и конечные нули не отображаются: #####.### отображает 1234.45 |
$ | Отображает знак доллара: $###,###.00 отображает $1 234,45 |
. | Десятичный символ-заполнитель, отображает десятичную точку в обозначенной позиции в строке символов-заполнителей 0: #.##.## отображает 1234.45 |
% | Символ процента, умножает значение на 100 и добавляет знак процента в позицию, указанную символами-заполнителями 0:#.#0.00% отображает число 0.12345 как 12.35% (происходит округление) |
, | Разделитель тысяч, добавляет запятые как разделители тысяч в строках символов-заполнителей 0 и #: ###,###,###.00 отображает 1 234,45 |
E- e- | Отображает значение в экспоненциальном формате со знаком порядка только для отрицательных значений: #.####E-00 отображает 1.23445Е03 |
E+ e+ | Отображает значение в экспоненциальном формате со знаком порядка как для отрицательных, так и для положительных значений: #.####E+00 отображает 1.23445Е+03 |
/ | Отделяет день, месяц и год для форматирования значений дат. |
m | Указывает, как отображать месяцы в датах: m отображает 1, mm - 01, mmm - янв, mmmm - Январь |
d | Указывает, как отображать дни в датах: d отображает 1, dd - 01, ddd - Вс, dddd - воскресенье |
y | Отображает день года как число от 1 до 366 |
yy | Указывает, как отображать годы в датах: yy - 66, yyyy - 1966 |
q | Отображает квартал года как число от 1 до 4 |
w | Отображает день недели как число (1 - воскресенье) |
ww | Отображает неделю года как число от 1 до 54 |
: | Отделяет часы, минуты и секунды в значениях формата времени: hh:mm:ss - 01:01:01, h:m:s - 1:1:1 |
h | Указывает, как отображать часы: hh - 01, h - 1 |
m | Указывает, как отображать минуты: mm - 01, m - 1 |
s | Указывает, как отображать секунды: ss - 01, s - 1 |
AM/PM | Отображает время в 12-часовом формате времени с добавленными АМ или РМ |
@ | Символьный заполнитель, отображает пробел, если не имеется соответствующего символа в форматируемой строке. |
< | Отображает все символы в верхнем регистре. |
> | Отображает все символы в нижнем регистре. |