Чтение онлайн

на главную

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

Курс на использование условных выражений

Несмотря на простоту концепции, управляющие структуры можно отнести к наиболее мощным средствам программирования. С одной стороны, эти структуры "только" выбирают, какой из двух различных блоков программного кода следует выполнить.

Но, с другой - когда в результате один блок программного кода выполнен, а другой - нет, вы имеете полное основание повторить за Фростом: "Это и явилось причиной всех различий".

Чтобы решить, выполнять ли некоторый блок программного кода, три следующие управляющие структуры VBA оценивают предложенное вами условное выражение: Do ... Loop.

If. . .Then и Select Case. Весь последующий материал этого раздела

посвящен использованию условных выражений в этих структурах. Две другие структуры, For. . . Next и For Each. . . Next, условных выражений не используют.

Как работает условное выражение

Структуры If. . .Then, Select Case и Do . . .Loop принимают решение о последующих действиях на основе простого теста: какое значение принимает выражение- True (Истина) или False (Ложь)? Условием здесь может быть любое выражение VBA. (Не забывайте, что в VBA 0 эквивалентен False, а все другие значения рассматриваются как True.)

Чаще всего условные выражения строятся на основе какой-нибудь операции сравнения, применяемой к двум другим выражениям, входящим в данное. Набор операций сравнения, доступных для использования в VBA, достаточно подробно обсуждался в главе 7. Но основные идеи видны и из примеров операторов, помещенных в следующую таблицу. Каковы эти выражения - истинные или ложные? Это только управляющим структурам известно.

Выражение

Перевод на русский язык

а < b

а меньше b

b = с

b равно с

colTBears ("Генри") Is objCurrentBear

Объект, хранящийся в коллекции colTBears под именем "Генри", является тем же самым объектом, что и объект, на который ссылается переменная objCurrentBear

sqr ( l/x * 29.3234) >= CDbl ( strNumber ) + 12

Квадратный корень величины, равной 1, разделенной на х и умноженной на 29,3234, не меньше числового значения строковой переменной strNumber плюс 12

Условные выражения без операторов сравнения

Большинство условных выражений включают операции сравнения, но ничто не мешает создать условия, не использующие такие операции. Прежде чем привести примеры, не помешает подвести под них некоторую теоретическую базу.

Этот вопрос обсуждается здесь не для того, чтобы заставить вас создавать условные выражения, не использующие операций сравнения, а просто потому, что такие выражения создают многие программисты. Часто такие условные выражения присутствуют в текстах программ, публикуемых в компьютерных журналах и представленных в Internet. Но пока вы занимаетесь освоением VBA, я рекомендую вам включать операции сравнения в условные выражения хотя бы для ясности программного кода, даже если такие операции и не необходимы.

Теперь о деталях. Как вы знаете, значением логической переменной всегда является либо True, либо False. Поэтому выражение

bоо1До18 ' это значение либо True, либо False

вполне подойдет в качестве условия в условном выражении, как, например, в случае

If bоо1До18 Then

ПредоставитьСкидку

End If

Но True и False имеют числовые значения, а поэтому в качестве условия можно использовать и любое числовое выражение. Все следующие выражения подходят для использования в качестве условий:

1234 ' всегда True

0 ' всегда False

True ' всегда True

False ' всегда False

intHowManyPets ' False,

если intHowManyPets = 0

ingA + lngB + lngC ' False, если сумма = 0

Свойства объектов часто представляют логические значения, поэтому в качестве условий нередко используются выражения типа frmHelpWindow.Enabled и безо всяких операций сравнения.

Нельзя использовать строки и объекты в качестве условий сами по себе, хотя они вполне годятся для использования в качестве компонентов выражений, построенных на основе подходящей операции сравнения.

Использование логических операций в условиях

Логические операции (см. главу 7) сначала оценивают значения входящих в выражение двух выражений-компонентов как True или False, а затем, в соответствии с определенными правилами, на основе этих значений получается конечный результат- тоже True или False.

Самыми важными логическими операциями (точнее, теми из них, использование которых проше всего объяснить) будут And, Or и Хог. Следующая таблица объясняет, что эти операции выполняют.

Операция

Возвращает True

Примеры

Результат

And

Только если оба выражения принимают значения True

3 * 2 = 6 And 12 > 11

True

2 + 2 = 4 And 4 - 2 = 1

False

Or

Если хотя бы одно из двух выражений принимает значение True

10 > 20 Or 20 > 10

True

5 < 4 Or 6 < 5

False

Хоr

Если только одно из двух выражений принимает значение True

– 5 + 5 < 9 Хог 5 + 5 = 10

True

5 + 5 > 9

Хог 5 + 5 = 10

False

Если желаете, можете использовать две логические операции в одном условном выражении. Полюбуйтесь, например, таким выражением:

(а + b > 20 And с = 10) Or (objDoor.Open)

В переводе на русский язык этот фрагмент программного кода можно прочитать так:

"Данное выражение есть истина, когда, либо а + b больше, чем 20, а с равно 10, либо свойство Open объекта objDoor принимает значение True".

Я советовал бы не перегружать одно выражение несколькими логическими операциями, разве что вы настолько сообразительны, что вам вообще не нужен компьютер. А чтобы гарантировать применение операций именно к тем выражениям, к которым нужно, используйте скобки. В предыдущем примере скобки вокруг выражения objDoor.Open гарантируют, что именно это выражение будет участвовать в операции Or первым.

Условные операторы If .. Then.

Условные операторы If. . .Then, а также их вариации If. . .Then. . .Else и If. . .ElseIf используются значительно чаще любых других операторов. Довольно часто операторы If. . .Then встречаются и в других главах, но в этой они уж точно в центре внимания.

Основная форма If...Then

Оператор If ... Then выполняет некоторый блок программного кода, если условие, которое вы предложили этому оператору, принимает значение True, и не делает ничего, если условие принимает значение False. Синтаксис оператора следующий:

Поделиться:
Популярные книги

Дворянская кровь

Седой Василий
1. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Дворянская кровь

Газлайтер. Том 16

Володин Григорий Григорьевич
16. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 16

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Стрелок

Астахов Евгений Евгеньевич
5. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Стрелок

Шатун. Лесной гамбит

Трофимов Ерофей
2. Шатун
Фантастика:
боевая фантастика
7.43
рейтинг книги
Шатун. Лесной гамбит

Проклятый Лекарь V

Скабер Артемий
5. Каратель
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Проклятый Лекарь V

На границе империй. Том 3

INDIGO
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
На границе империй. Том 3

Новый Рал

Северный Лис
1. Рал!
Фантастика:
фэнтези
попаданцы
5.70
рейтинг книги
Новый Рал

Его наследник

Безрукова Елена
1. Наследники Сильных
Любовные романы:
современные любовные романы
эро литература
5.87
рейтинг книги
Его наследник

Венецианский купец

Распопов Дмитрий Викторович
1. Венецианский купец
Фантастика:
фэнтези
героическая фантастика
альтернативная история
7.31
рейтинг книги
Венецианский купец

Мастер темных Арканов

Карелин Сергей Витальевич
1. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мастер темных Арканов

Всплеск в тишине

Распопов Дмитрий Викторович
5. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Всплеск в тишине

Начальник милиции

Дамиров Рафаэль
1. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2