Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Приемы программирования в среде Visual Basic for Application. Учебное пособие
.pdf
vbCr – константа
перевода строки.
Линейные программы
Программы пишутся построчно. Все операторы имеют одинаковый отступ и выполняются последовательно друг за другом. Такие
программы называются линейными.
Ряд операторов, выполняющих идентичные операции, можно располагать в одной строке через «:». Это уменьшает число строк кода, и
иногда позволяет легче читать программу, однако при возникновении
ошибок надо будет анализировать какой из операторов этой строки содержит ошибку. Поэтому, если пишется большая программа, лучше
каждый оператор размещать в отдельной строке кода, что существенно
упрощает отладку программы и поиск в ней ошибок.
Оператор перехода
Для изменения последовательности выполнения операторов (т.е.
для ветвления программы) используется оператор перехода
GоТо
имеющий следующий синтаксис:
GoTo метка
В этом операторе метка - это целое неотрицательное число без
знака (0, 1, 2, 3, ...) или последовательность букв и цифр, начинающаяся с буквы (например,
start53а
).
Перед оператором, на который должен быть осуществлен переход (или должно быть передано управление), ставится метка с двоеточием. После выполнения оператора с меткой выполняется оператор, следующий за ним, если помеченный оператор не
GоТо
.
Если меткой является целое неотрицательное число, то это число еще называют номером оператора (строки).
Конструкции принятия решений
Типичной является ситуация, когда в определенном месте программы необходимо выполнить те или иные операторы в зависимости
,
от некоторых условий. Выбор операторов осуществляется с помощью
одной из двух конструкций принятия решений –
Select … Case
.
- 31 -
If … Then и

Ветвление по условиям
Первая конструкция принятия решений –
условным оператором. На русский язык «
If...Then
If...Then
» переводится как
, называется
«если...то». Существует несколько разновидностей этой конструкции.
Простейший условный оператор:
If условие Then оператор
В этой конструкции условие представляет собой логическое выражение. Компьютер рассчитывает значение этого логического выражения. Если оно является
тинно. Если значением является
вие ложно. При истинности условия выполняется оператор
тор
, находящийся после ключевого слова
Тruе
, то будем говорить, что условие ис-
False
, то будем говорить, что усло-
опера-
Then
, при ложности опера-
тор не выполняется.
Далее выполняется оператор, следующий за конструкцией
If...Then
(если оператор не является оператором перехода
, вне зависимости от того, выполнен оператор или нет
GоТо
).
Рассмотрим следующую программу:
Public Sub IT1()
Dim X As Byte
X = 12 'начальное значение X
If (X > 9 And X < 12) Then X = X + 1
X = X + 2
X = X * 2 'конечное значение X
End Sub
Задание
1) Поставьте точку останова напротив строки
End Sub
;
2) запустите программу, кликнув на стрелке панели инструментов;
3) убедитесь в том, что в момент останова х равняется 28;
4) объясните этот результат;
5) кликните на стрелке на панели инструментов для окончания вы-
полнения программы;
6) в конструкции
If...Then
измените условие так, чтобы в момент
останова переменная х имела значение 30;
7) текст программы
Частным случаем рассмотренной конструкции
IТ1
верните в исходное состояние.
If...Then
является оператор условного перехода, включающий в себя оператор
перехода
If условие Then GоТо метка
GоТо
. Синтаксис оператора условного перехода:
- 32 -

Согласно этому оператору, при истинности условия происходит
Операторы
Операторы до
переход на метку
метка
и выполняется помеченный оператор.
Пример
Public Sub IT2()
Dim X As Integer
X = 12
2: If X > 9 And X < 12 Then GоТо LastLine
X = X - 2
GoTo 2
LastLine:
End Sub
Задание
1) Выполните программу
IТ2
пошагово, следя за последовательно-
стью выполнения операторов и изменением значения х;
2) объясните, почему значение х меняется так, а не иначе.
Если при истинности условия требуется выполнить несколько
операторов, то следует использовать конструкцию вида
If условие Then
операторы
End If
Этот условный оператор работает таким образом. Если условие ис-
тинно, то выполняется блок операторов
ключевого слова
условия
ложно, то блок
ется. Далее выполняется оператор, сле-
Условие
Операторы Операторы
Ложь Истина
дующий за служебным словосочетанием
End If
полнен блок
До этого мы рассматривали опе-
раторы, имеющие одно условие, т.е.
после условия
Рис.9. Схема оператора
If…Then
неполные операторы, но операторы
могут быть и полными (содержать оба
условия). Алгоритм полного оператора
показан на рис.9.
операторы
, находящийся после
Then
операторы
. Если же условие
не выполня-
, вне зависимости от того, вы-
операторы
или нет.
Он может записываться в одну
строку, если имеется не более чем по одному оператору на каждое из
условий
If Mx<0 Then K=1 Else K=1
Иначе он пишется в несколько строк
- 33 -

If Mx<0 Then
операторы по условию Истина
Else
операторы по условию Ложь
End If
Эта конструкция условного оператора работает следующим об-
разом. Если условие истинно, то выполняется блок
условию Истина
условие ложно, то выполняется блок
Ложь
блока
вию Ложь
, находящийся после ключевого слова
операторы по условию Истина
выполняется оператор, следующий за строкой
, находящийся после ключевого слова
операторы по условию
Else
или
. После выполнения
операторы по усло-
В качестве примера использования последней конструкции при-
ведем следующую программу:
Public Sub IT3()
Dim X As Byte
X = 12 'начальное значение X
If (X > 9 And X < 12) Then
X = X + 3
Else
X = X + 2
End If
X = X * 2 'конечное значение X
операторы по
Then
End If
. Если
.
End Sub
В том случае, когда блок операторов нужно выполнять после
проверки не одного, а нескольких условий, следует использовать такую конструкцию
If условие1 Then
операторы1
ElseIf условие2 Then
операторы2
ElseIf условие3 Then
операторы3
...
[Else
операторыN]
End If
Если первое условие истинно (т.е. логическое выражение
вие1
имеет значение
If…Then:
Тrие
), то выполняется блок
усло-
операторы1
. Если
оно ложно, то проверяется второе условие, находящееся после ключе-
- 34 -

вого слова
ElseIf
. При истинности второго условия (т.е. если логиче-
ское выражение
операторы2
, и т.д. Если ни одно из условий не являются истинным, то
выполняется блок
ва
Else
. Далее выполняется оператор, следующий за служебным сло-
восочетанием
раторы1, операторы2
условие2
операторыN
End If
имеет значение
Тrие
) выполняется блок
, расположенный после ключевого сло-
, вне зависимости от того, какой из блоков (
,... или
операторыN
) выполнен.
опе-
Иногда можно пользоваться функцией условием
переменная = IIf(условие, выражение1, выражение2)
В ней
выражение1
условие
и
выражение2
представляет собой логическое выражение, а
— арифметические или логические вы-
ражения или строки, которые можно рассматривать как выражения.
Функция
ражение1
или
принимает логическое выражение -
IIf
возвращает в программу значение выражения
выражение2
в зависимости от того, какое значение
Тrие
или
False
.
вы-
Пример
Public Sub IT4()
Dim intA As Integer
Dim strA As String
intA = 6
strA = IIf(intA Mod 2 = 0, "Четнoe", "Heчeтнoe")
End Sub
Примером может служить выражение
К=IIf(Mx<0, 1,-1).
Однако надо помнить, что оба выражения внутри оператора
должны всегда иметь решения. Например, если в выражении стоят не
конкретные числа, а исполняемые операторы и какая-либо переменная в них определяется начальным условием, то оператор всегда будет выдавать ошибку, так как не сможет вычислить оператор полностью –
X=IIf(Y<>0, Z/Y, Z).
В данной ситуации программа всегда будет пытаться поделить Z на Y и при равенстве Y нулю будет выводиться ошибка. Это условие обязательно надо писать в нормальной
структуре If.
Вторая конструкция принятия решений (или ветвления) –
Select Case
Sеlесt Саsе выражение
Саsе значение1
операторы1
Саsе значение2
, называемая оператором выбора:
- 35 -

операторы2
…
[Саsе Е1sе
операторыN]
Еnd Sеlесt
В ней
выражение
— арифметическое или логическое выраже-
ние или строка. Работает оператор выбора следующим образом.
Если
ется блок операторов
чение
выражение
значение2
принимает значение
операторы1
. Если выражение принимает зна-
, то выполняется блок
значение1
операторы2
, то выполня-
и т.д. Если вы-
ражение не равно ни одному из приведенных значений, то выполняется блок
ния
Саsе Еlsе
Еnd Sеlесt
ры1, операторы2
В том случае, когда при нескольких значениях выражения
ражение
значения нужно перечислить после ключевого слова
операторыN
, находящийся после служебного словосочета-
. Далее выполняется оператор, следующий за строкой
, вне зависимости от того, какой из блоков (
, ... или
операторыN
) выполнен.
операто-
вы-
необходимо выполнить один и тот же блок операторов, эти
Саsе
, разделяя
их запятыми.
Пример
Public Sub Bыбop ()
Dim x As Integer
x = 1
Select Case 2 * x + 1
Case 1
x = x + 1
Case 2, 3, 4
x = 10
Case Else
x = 20
End Select
x = x Mod 3
End Sub
Циклы в программе
Часто в программах надо повторить часть операторов несколько
раз. Для многократного выполнения блока операторов используется
один из трех операторов цикла –
For … Next
:,
While … Wend
или
Dо … Lоор
.
- 36 -

Часто заранее известно сколько раз надо повторить цикл, напри-
Операторы
мер, надо ввести данные в массив из 5 элементов, но бывают случаи, ко-
гда число повторений не известно, например,
I=1,10,2
надо найти первую пустую ячейку на листе.
Иногда возникают ситуации, когда блок внутри
цикла
цикла может быть просто обойден (например,
первая ячейка пустая).
Рис.10. Алгоритм
цикла For … Next
Цикл
случае, когда количество выполнений заданного блока операторов известно заранее. Алгоритм цикла представлен на рис.10. Данная
For … Nехt
используется в том
конструкция имеет следующий синтаксис:
For счетчик = начало To конец [Step шаг]
onepaтopы
Next [счетчик]
При положительном значении величины
шаг
цикл
работает следующим образом.
Переменной
Далее проверяется условие
верки этого условия является значение
ние работы цикла. При этом операторы цикла
счетчик
сначала присваивается значение
счетчик
>
конец
Тruе
. Если результатом про-
, то происходит оконча-
операторы
For … Next
начало
ни разу не
.
выполняются.
Если результатом проверки условия
False
, то в этом случае операторы цикла выполняются первый раз.
счетчик > конец
является
После этого происходит переход на начало цикла. Далее значение переменной счетчик увеличивается на величину шага
снова проверяется условие
ется
Falsе
, то операторы цикла выполняются второй раз, и т.д.
счетчик > конец
. Если результатом явля-
шаг
, после чего
Выполнение цикла оканчивается, когда результатом проверки
условия
счетчик > конец
становится
Тruе
. По окончании цикла
выполняется оператор, следующий за циклом, т.е. за ключевым словом
Next
.
Пример. Программа расчета факториал числа 6 имеет следую-
щий вид:
Public Sub Фaкториал1()
Dim I As Byte
Dim F As Long
F = 1
- 37 -

For I = 1 To 6 Step 1
F = F * I
Next I
End Sub
Напомним, что факториал целого положительного числа n обо-
значается n! и (согласно определению) n! равняется произведению
целых чисел от 1 до n: n! = 1 ∗2 ∗ ... ∗n.
Для результата отводится ячейка, в которую до начала простого
цикла записывается 1, в данном случае
F=1
.
Пример. Второй вариант программы расчета 6!
Public Sub Фaкториал2()
Dim I As Byte
Dim F As Long
F = 1
For I = 6 To 1 Step -1
F = F * I
Next I
End Sub
В случае отсутствия ключевого слова
Step
шаг изменения пе-
ременной счетчик полагается равным единице.
В качестве параметров цикла
начало
,
конец
и
шаг
можно использовать не только числа, но и арифметические выражения. Важно,
чтобы к моменту выполнения цикла
For … Next
все переменные в
этих арифметических выражениях имели числовые значения (были
определены).
Зачастую требуется досрочно выйти из цикла. В этом случае
цикл
For … Next
For счетчик = начало To конец [Step шаг]
onepaтopы1
If условие Then Exit For
onepaтopы2
Next [счетчик]
записывается в виде
Досрочное окончание цикла обеспечивается оператором, обо-
значаемым служебным словосочетанием
Exit For
. Работает цикл
следующим образом.
При каждом значении переменной счетчик после выполнения
блока
выражения условие. Если это значение равно
операторы1
компьютер рассчитывает значение логического
False
, то работа цикла
продолжается. В противном случае работа цикла оканчивается: блок
- 38 -

операторы2
не выполняется, а осуществляется переход на оператор,
следующий за циклом.
Пример. Четвертый вариант программы расчета 6!
Public Sub Фaктopиал4()
Dim I As Byte
Dim F As Long
F = 1
For I = 1 To 13 Step 1
F = F * I
If I = 6 Then Exit For
Next I
End Sub
Часто в примерах встречается задача накопления суммы, которая решается с помощью оператора цикла. Для результата, как и в
случае вычисления произведения, отводится ячейка, в которую перед
началом простого цикла записывается ноль, например
S=0
.
Сумма накапливается в ячейке S путем многократного выполнения оператора присваивания
S=S + слагаемое
, который располага-
ется внутри простого цикла.
Результат получается в ячейке S по окончании работы простого
цикла, т.е. печать S и другие действия с S выполняются после оператора
Next
.
Пример
Найдите сумму слагаемых вида 5х2, для х, изменяющегося от 5
до 15 с шагом 0,3.
Public Sub Sum()
S=0
For x = 5 To 15 Step 0.3
S=S+5*x^2
Next x
End Sub
Существуют два варианта циклов – первый, который мы подробно рассмотрели ранее, выполняется по счетчику, определяемому в
операторе.
Второй вариант оператора – перебор всех объектов в коллекции
(это все листы книги, ячейки листа или выделенного диапазона и др.).
Этот оператор часто используется для работы со всеми листами книги, которые описаны коллекцией «Sheets» или других объектов.
Записывается оператор следующим образом:
- 39 -

For each Sh in ActiveWorkbook.Sheets
Операторы
Операторы
…
Next
Здесь нет в конце имени счетчика, переменная Sh является объектом коллекции.
Цикл применяется в том случае, когда число выполнений операторов цикла заранее неизвестно. Синтаксис этого цикла:
While условие
oпepaторы
Wend
Работа цикла
гического выражения
While … Wend
условие
. Если
начинается с расчета значения ло-
условие = False
, то работа
цикла заканчивается, т.е. осуществляется переход на оператор, расположенный после ключевого слова
то выполняются операторы цикла
рассчитывается значение логического выражения
Wend
. Если
операторы
условие = Тruе
. После этого опять
условие
, и т.д.
Пример. Пятый вариант программы расчета 6!
Sub Факториал5()
Dim I As Byte
Dim F As Long
F = 1: I = 1
While I <= 6
F = F * I
I = I + 1
Wend
End Sub
Цикл
Do … Lоор
, как и цикл
While … Wend
, применяется, ко-
,
гда число выполнений операторов цикла заранее неизвестно. Он имеет два варианта оформления – с предусловием и постусловием
(рис.11).
Предусловие
цикла
Рис.11. Алгоритмы цикла Do … Loop с предусловием
и постусловием, соответственно.
- 40 -
цикла
Постусловие
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
