VBA для чайников
Шрифт:
Заметьте, что знак равенства в YBA (=) используется в двух разных случаях.
В объявлении равенство используется для присваивания значения переменной (см. выше раздел "Размещение информации в переменных"), а в качестве операции сравнения знак равенства определяет, будут ли два значения одинаковыми.
Результатом вычисления выражения, основанного на этих операциях, всегда является либо True (Истина), либо False (Ложь). Например, вот выражение с использованием операции <= (меньше или равно):
intX <= 12
Если значением intX является 12, то результатом выражения будет False, поскольку 12 не меньше, чем 12.
Чаще всего выражения с операциями сравнения
If intX = 2000 Then
Застолье
End If
Здесь с помощью знака операции - выясняется, равны ли значения по обе стороны от него. Если значения равны, то результатом выражения будет True (Истина), иначе False (Ложь); другими словами: '"Если значение intX равно 2000, то выполнить процедуру Застолье".
Сравнение строк
Знаки операций сравнения можно использовать для сравнения строк текста и чисел.
Выражение
"Петуния" = "Нарцисс"
в результате дает False - и это очевидно, поскольку эти две строки не одинаковы.
Но есть случаи, когда результат сравнения строк предсказать не так просто. Чтобы получать правильные результаты при сравнении строк, нужно знать, по каким правилам VBA решает, что одна строка '"больше", чем другая.
Если вы не потребуете сравнивать иначе, VBA будет использовать метод двоичного сравнения. Две строки будут сравниваться на основе числовых кодов входящих в эти строки символов, т.е. кодов, которыми символы представляются в программе. В такой системе кодирования наименьшие числа соответствуют знакам пунктуации, за ними следуют цифры, затем прописные буквы, строчные и, наконец, буквы с акцентами (последнее касается латинской кодировки, поскольку в случае кириллической колировки на месте букв с акцентами находятся русские буквы). В этом случае, ввиду того, что коды строчных букв больше кодов прописных букв, выражения "а" > "А" и "а" > "Z", например, оба дают в результате True.
При сравнении строк VBA начинает сравнивать первые символы этих строк. Если первые символы различны, большей строкой будет та. первый символ которой больше. Если же первые символы равны, VBA сравнивает следующие символы, и т.д.
Чтобы при сравнении использовался другой, интуитивно более понятный метод, поместите в раздел объявлений модуля оператор Option Compare Text.
В результате этого сравнение строк будет выполняться по алфавиту без учета регистра букв (но все равно будет считаться, что буквы с акцентами имеют более высокие коды, чем соответствующие им буквы без акцентов). В этом случае следующие выражения дадут в результате True (Истина):
"а" = "А"
"а" < "Z"
Сравнение строк разной длины
Но что будет, если придется сравнивать строки неравной длины? Если начало одной строки в точности совпадает с другой, более короткой строкой, то длинная строка считается больше короткой. Например:
"В горах, в пещере" > "В горах" дает в результате True (Истина).
Но если две строки различаются не только по длине, но и по содержанию в рамках сравнимой дойны, применяется общий критерий сравнения. Например.
"У меня двенадцать" > "У меня двадцать два" дает в результате True (Истина), поскольку буква е в слове двенадцать больше, чем а в слове двадцать, несмотря на то, что левая часть выражения короче правой.
Сравнение
с помощью LikeКак правило, с помощью Like строка сравнивается не с конкретным набором символов, а с заданным образцом, в котором используются замещающие символы, когда нужно убедиться, что строка попадает (или не попадает) в некоторый класс строк. У меня нет возможности вдаваться здесь в детали, но вы должны знать, что сравнение такого типа в VBA есть и что это довольно мощное средство для обработки текстовых данных.
Операторы сравнения в программном коде
Результат выполнения сравнения можно сохранить в переменной (обычно для этого используется переменная типа Boolean) с помощью стандартного оператора присваивания: boolTheAnswerIs = 5 > 4
Поскольку 5 больше, чем 4, результатом сравнения будет True (Истина), а поэтому VBA присвоит переменной boolTheAnswerIs значение True.
Ключевые слова True и False на самом деле встроенные числовые константы
VBA, соответственно представляющие значения -1 и 0. Результат сравнения можно присвоить любой числовой переменной.
Операции сравнения часто используются в условных операторах, чтобы принять решение о выполнении той или иной ветви программного кода:
If intP <= intQ Then
ЧтоТоНеТак ' вызов процедуры обработки ошибок
End If
Объединение текста
Знак конкатенации, & (амперсанд), обозначает операцию соединения строк в одну. Его можно использовать со строками текста, строковыми переменными или любыми функциями, возвращающими строковые значения. Его можно использовать несколько раз, чтобы строить длинные строки из нескольких строковых значений, как, например, здесь:
strA = "Вы ответили " & InputBox("Введите ответ:") & _
". Правильным ответом было " & strAnswer & "."
В результате выполнения этого оператора strA может содержать, например, "Вы ответили Португалия. Правильным ответом было Испания", или какую-то подобную строку.
При составлении большой строки из маленьких не забывайте добавлять в строку результат необходимые пробелы и знаки пунктуации.
Дополнительные сведения о типах данных
В этом разделе приводятся рекомендации по поводу того, где и когда использовать различные типа данных VBA. При этом рассматриваются все типы данных, кроме двух. Тип данных Object, хотя и очень полезен, но достаточно сложный, поэтому отдельно обсуждается в главе 12. Пользовательские типы данных в настоящей книге не рассматриваются.
Преобразование типов данных
Типы данных существуют только для удобства программиста - VBA хранит всю свою информацию исключительно в цифровой форме. А поскольку это так, преобразование данных одних типов в другие не слишком большая проблема для VBA.
В VBA есть целый ряд встроенных функций для преобразования одних типов данных в другие. Эти функции рассматриваются в главе 11 и с их помощью вы можете управлять такими преобразованиями. Но важно знать, что всегда, когда это следует из контекста, VBA автоматически конвертирует данные к подходящему типу. Например, если в выражении участвуют строка, состоящая только из цифр, и числовое значение, связанные знаком операции +, то к числовому значению будет прибавлено число, определяемое строкой. Точно так же, если присвоить целой переменной значение с десятичными знаками, то VBA автоматически округлит это значение.