Удаление ненужных символов
Зачастую строки в программе содержат ненужные символы пробелов в конце или в начале строки, которые необходимо удалить, т.к. посторонние начальные или конечные пробелы в строке могут вызвать "неполадки" в работе программы. В VBA имеются три функции, предназначенные для удаления начальных и конечных пробелов из строки: LTrim, RTrim, Trim. Эти функции не изменяют исходную строку, а возвращают копию строки с удаленными лишними пробелами.
Пример
Sub Встр_функции_1()
Dim Стр0, Стр1, Стр2, Стр3
Стр0 = " Строка "
Стр1 = RTrim(Стр0)
Стр2 = LTrim(Стр0)
Стр3 = Trim(Стр0)
MsgBox "(" & Стр1 & ")" & Chr(13) & _
"(" & Стр2 & ")" & Chr(13) & _
"(" & Стр3 & ")"
End Sub
При выполнении этой процедуры выводится диалоговое окно
Определение длины строки
Длину строки, как правило, надо знать при форматировании сообщений для пользователя или при форматировании строковых данных, вводимых процедурой в рабочий лист Excel или документ Word. VBA для этих целей использует функцию Len. В приведенным ниже листинге между знаками круглых скобок и словом присутствует по два пробела.
Пример
Sub Встр_функции_2()
Dim Стр0 As String, Стр1 As Byte
Стр0 = " Строка "
Стр1 = Len(Стр0)
MsgBox "Стр1=" & Стр1
End Sub
Строка фиксированной длины имеет всегда одну и ту же длину, и поэтому функция Len всегда возвращает объявленную длину строки, независимо от фактической длины строки. Например, если в строковой переменной фиксированной длины Стр0 определить длину, равную 20 символам, а фактически находится слово "Строка", то функция Len(Стр0) возвратит результат, равный 20.
Примеры
Sub Встр_функции_3()
Dim Стр0 As String * 20, Стр1 As Byte
Стр0 = "Строка"
Стр1 = Len(Стр0)
MsgBox "Стр1=" & Стр1
End Sub
Чтобы в таком случае узнать фактическую длину строки (в нашем случае - 6), необходимо использовать комбинацию функций Len(Trim(StrokeName)):
Sub Встр_функции_4()
Dim Стр0 As String * 20, Стр1 As Byte
Стр0 = "Строка"
Стр1 = Len(Trim(Стр0))
MsgBox "Стр1=" & Стр1
End Sub
Сравнение и поиск строк
В VBA имеются две функции, помогающих сравнивать строки: StrComp и InStr.
Функция StrComp
Формат функции:
StrComp (String1, String2 [, Compare])
где String1, String2 - любые два строковых выражения, которые необходимо сравнивать. Compare - необязательный аргумент, может быть любой из следующих предопределенных констант:
- vbBinaryCompare - бинарное сравнение двух строк;
- vbTextCompare - текстовое сравнение двух строк.
При бинарном сравнении коды символов упорядочены в соотвествии с их двоичным значением, и коды строчных и прописных букв раразличаются при сравнении. При текстовом сравнении VBA прописные и строчные буквы не различает. Если аргумент Compare опускается, то используется текущая установка Option Compare.
Если аргумент Compare опускается, то используется текущая установка инструкции Option Compare (см. Примечание к п. Инструкция условного перехода If…Then…Else).
Пример
В данном примере инструкция Option Compare используется для задания метода сравнения строковых данных, используемого по умолчанию.
Option compare Binary ' т.е. "AAA" < "aaa"' Устанавливает метод сравнения строковых данных Binary.Option compare Text ' т. е. "AAA" = "aaa".' Устанавливает метод сравнения строковых данных Text.При выполнении процедуры StrComp возвращает следующее значене:
- -1, если String1 меньше String2;
- 0, если String1 и String2 равны;
- 1, если String1 больше String2.
Пример
Sub Встр_функции_5()
Dim R1 As String, R2 As String, R3 As String
R1 = StrComp("Строка1", "Строка2", vbTextCompare)
R2 = StrComp("Строка1", "Строка1", vbTextCompare)
R3 = StrComp("Строка2", "Строка1", vbTextCompare)
MsgBox "R1=" & R1 & " " & "R2=" & R2 & " " & "R3=" & R3
|
В первой инструкции присваивания текстовое выражение Строка1 меньше, чем Строка2, и поэтому значение R1=–1, во втором они равны (R2=0) и в третьем Строка2 больше, чем Строка1 (R3=1).
Функция InStr
Функция InStr дает возможность определить, содержит ли одна строка другую строку.
Формат функции:
InStr([Start,] String1, String2 [, Compare])
String1, String2 – любые допустимые строковые выражения. Функция проверяет, содержится ли String1 в String2.
Start – необязательный аргумент, является численным выражением и указывает положение символа в String1, с которого должна начинаться проверка. Аргумент Start является обязательным, если указывается аргумент Compare.
Compare имеет тот же смысл, что и в функции StrComp.
InStr возвращает число, обозначающее положение символа в String1, где было обнаружено String2. Если InStr не находит String2 в String1, то возвращается 0. Если String1 (или String2) имеет значение Null (“Пусто”), то функция также возвращает Null.
Пример
Sub Встр_функции_6()
Dim R1 As String, R2 As String
R1 = "Строка ввода"
R2 = "Ввод"
MsgBox "R2 входит в R1 с позиции " & _
InStr(1, R1, R2, vbTextCompare)
End Sub