Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Приемы программирования в среде Visual Basic for Application. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
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 -
цикла
Постусловие
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]