Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Инф_Раздел4.doc
Скачиваний:
14
Добавлен:
20.04.2019
Размер:
293.89 Кб
Скачать

If условие1 Then

блок операторов 1

ElseIf условие2 Then

блок операторов 2

...

Else

блок операторов n

End If

Программа Ргос2 отображает запрос на ввод пароля. Если пароль введен правильно, программа предоставляет пользо­вателю определенные возможности работы с рабочей книгой и сообщает ему об этом.

Private Sub Ргос2_ IfThenElseIf ()

Dim Password As String

Dim Elem As Object

Password = GetPassword

If Password = "level 1" then

For Each Elem In Form1

Elem.Font.Name = “Ms Sans Serif”

Elem.Font.Italic = True

Elem.Font.Size = 10

Next Elem

ElseIf Password = "level 2 "

For Each Elem In Form1

Elem.Font.Name = “Ms Extra”

Elem.Font.Italic = False

Elem.Font.Size = 14

Next Elem

ElseIf Password = "level 3''

For Each Elem In Form1

Elem.Font.Name = “Ms Sans Serif”

Elem.Font.Bold = True

Elem.Font.Size = 20

Next Elem

Else

MsgBox "Пароль не корректен. Повторите ввод пароля."

End If

End Sub

Function GetPassword ()

GetPassword = Lease (InputBox ("Введите пароль: " , "Пароль"))

End Function

В РгосЗ 1 ключевое слово Elself с последующим условием использу­ется дважды. Новое условие вносит в порядок выполнения команд допол­нительные изменения, если проверка первого условия закончилась неуда­чей. В РгосЗ! первое условие указано сразу за ключевым словом If. В нем проверяется равенство переменной Password строке "/eve//". Если пере­менная не равна строке, VBA переходит к первому ключевому слову Elself, где проверяет следующее условие — равенство переменной Password стро­ке "/eve/2". Начиная с этого момента, программа использует только новое условие, "забывая" о старом. Если равенства опять нет, управление пере­ходит к следующему ключевому слову Elself и т. д.

В строке 3 процедуры РгосЗ! вызывается функция GetPassword, в которой использованы новые элементы. Рассмотрим более подробно эти элементы.

Function GetPassword ()

GetPassword = Lease (InputBox("Enter Password: ", " Password")) End Function

Здесь во второй строке заданы обращения к двум встроенным функ­циям VEA-Lcase и InputBox. Первая преобразует все буквы переданной в нее строки в строчные. Вторая выводит на экран диалоговое окно с запро­сом на ввод данных пользователем. У этой функции есть несколько необя­зательных аргументов, из которых нас интересуют только первые два. Один из них - строка, отображаемая в окне над полем для ввода. Второй содержит строку заголовка диалогового окна. При вызове функции Input-Box на экране появляется диалоговое окно с заданными заголовком и тек-

стом - приглашением, кроме того оно содержит пустое поле, в котором пользователь может ввести данные. Значение, возвращаемое InputBox, за­висит от того, какую кнопку щелкнет пользователь. Если это - ОК, воз­вращается введенная строка, если - Отмена (Cancel), то пустая. В нашем примере буквы этой строки передаются в функцию Lease, которая преоб­разует их в строчные. В блоке, начинающемся сразу за ключевым словом If, помещен цикл For-Each-Next (он подробно описан ниже в разделе "Управляющая структура For-Each-Next"). В этом цикле перебираются все листы активной рабочей книги, с каждым из которых выполняются два действия - свойству Visible присваивается значение True и вызывается ме­тод Unprotect. Первое действие позволяет пользователю видеть лист, вто­рое - снимает с листа защиту паролем. У метода Unprotect есть один аргу­мент — строка с паролем. Но в данном случае пароль для защиты листов мы не использовали, поэтому Unprotect вызван без аргументов. В других бло­ках программы свойство Visible и метод Unprotect вызываются выборочно, в зависимости от введенного пароля.

21 Управляющая структура Select Case

Структура Select Case позв. в завис-ти от знач.пере­менной или выражения выполнить один из нескольких фрагментов про­граммы. Select Case работает с единств. оцениваемым выражением. Синтаксис:

Select Case Оцениваемое выражение

Case Список выражений 1

Блок операторов 1

...

Case Список выражений n

Блок операторов n

End Select

В примере исполь­з .структура для определения прав пользователя согласно введенному им паролю.

Private Sub РгосЗ_ SelectCase ()

Dim Password As String

Dim Elem As Object

Password = Lease (InputBox ("Введите пароль: " , "Пароль"))

Select Case Password

Case "level 1"

For Each Elem In Form1

Elem.Font.Name = “Ms Sans Serif”

Elem.Font.Italic = True

Elem.Font.Size = 10

Next Elem

Case "level 2 "

For Each Elem In Form1

Elem.Font.Name = “Ms Extra”

Elem.Font.Italic = False

Elem.Font.Size = 14

Next Elem

Case "level 3''

For Each Elem In Form1

Elem.Font.Name = “Ms Sans Serif”

Elem.Font.Bold = True

Elem.Font.Size = 20

Next Elem

Case Else

MsgBox "Пароль не корректен. Повторите ввод пароля."

End Select

End Sub

Select Case

Ключевые слова, отмечающие начало структуры.

Password

Переменная или выражение, чье значение опред.выбор фрагмента кода для выполнения. Оно должно совпадать со значением, указ. после одного из ключ. слов Case. Если ни одного совпадения нет, выполн.фраг­мент, написан.после слов Case Else. Если и этих слов нет, управление передается оператору, заданному после End Select.

Case"level"

Варианты значения. Если значение определяющего выражения совпадает с ним, выполняется фрагмент про­граммы до следующего ключевого слова Case, а затем управление передается операторам, стоящим после End Select. Если совпадения нет, управление передается сле­дующему Case.

Case Else

Фрагмент программы, указанный за этими словами, выпол­няется, если значение определяющего выражения не совпа­ло ни с одним из предыдущих вариантов Case.

End Select

Ключевые слова, отмечающие конец структуры Select Case.

22 Управляющая структура For-Next

Она позволяет выполнять несколько команд заданное число раз. Синтаксис:

For СчетчикЦикла = Начальное значение To

Конечное значение [Step Шаг]

блок операторов

[Exit For]

Next [СчетчикЦикла]

Парам-ры СчетчикЦикла, Начальное значение, Конечное значение, Шаг – числовые.

For

Ключевое слово, отмечающее начало оператора For-Next

Step

Ключ. слово, задающее шаг приращения счетчика при заверш. очеред. цикла. Чаще все­го он равен 1, но может быть любым целым числом, в том числе и отрицатель­ным (тогда значение счетчика в каждом цикле уменьшается). В начале очеред. цикла знач. счетчика сравнивается с его конеч.значением. Если разница положит. (значение счетчика превосходит его конечное значение), управление передается оператору, заданному после ключевого слова Next. To же происходит и при отрица­т. разнице. Указание ключевого слова Step и величины шага не является обязательным. Если они не определены, VB выполняет цикл с шагом 1

Next

Ключевое слово, отмечающее конец структуры For-Next. При достижении ключ. слова Next знач. счетчика увелич. на величину ша­га, после чего управление передается на начало цикла. Затем происходит сравнение счетчика с ко­неч.значением, и цикл при необходимости повтор. снова

Пример использ. цикла Fox-Next в процедуре вычисл. факториала числа, введен. с клав-ры с помощью функции InputBox.

Private Sub Ргос5_ForNextlfThenElse ()

Dim NumberString As String

Dim Num As Integer

Dim Factorial As Double

Dim Countl As Integer

NumberString = InputBox ("Введите число: ", "Вычисление факториала")

If IsNumeric (NumberString) Then

Num = Val (NumberString)

If Num >= 0 Then

Factorial = 1

For Count1 = 1 To Num

Factorial = Factorial* Countl

Next

MsgBox "Факториал числа" & Num & "равен " & Factorial

Else

MsgBox "Факториал отрицат. числа не существует"

End If

Else

MsgBox "Введено нечисловое значение. повторите ввод"

End If

End Sub

InputBox

выдает на экран запрос на ввод числа, а за­тем, используя цикл For-Next и два условных оператора If-Then-Else, вы­числяет его факториал

IsNumeric

возвращ. True, если ее единственный аргу­мент явл. числом, и False — в противном случае

Val

преобразует переданную ей строку в чис­ло, которое затем присваивается переменной Num.

23 Управляющая структура While-Wend

Действие ее подобно действию Far-Next, но группа операторов вы­полняется не заданное число раз, а до соблюдения опред. условия. Синтаксис:

While условие

блок операторов

Wend

Прог-ма Ргос6 – для выделения 7 из последовательности случайных чисел.

Private Sub Proc6_WhileWend ()

Dim LotteryEntry As Integer

LotteryEntry = 0

While LotteryEntry <> 7

LotteryEntry = Int (10 *Rnd ())

Beep

Wend

MsgBox "Ваш номер равен"& LotteryEntry &". Вы выиграли!!!"

End Sub

Программа гарантирует, что в информац. окне всегда отображ. заданное число. Цикл While-Wend выполняется, пока значе­ние переменной LotteryEntry не станет равным 7. При каждом выполнении цикла этой перемен­ной присваивается случайное значение от 1 до 9, а затем с помощью функ­ции VB Beep подается звуковой сигнал через внутренний динамик компьютера. При запуске этой программы несколько раз, можно услышать разное кол-во сигналов, в зависимости от того, на каком шаге генера­тор случайных чисел вернет число 7.

While

Ключевое слово, начало структуры While-Wend.

LotteryEntry <> 7

Условие, опред., будет ли выполнен цикл. Если да, цикл вы­полняется, если нет, управление передается оператору, стоящему за ключ. словом Wend.

LotteryEntry=Int(10*Rnd())

Первый оператор тела

Веер

Второй оператор тела.

Wend

Ключевое слово, отмечающее конец структуры While-Wend.

24 Управляющая структура Do-Loop

Она похожа на структуру While-Wend, но 1)условие завершения цик­ла Do-Loop можно задавать не только в его начале, но и в конце. Условие вконце цикла гарантирует, что он будет выполнен хотя бы один раз. 2)условие можно сделать критерием как выполнения цикла Do-Loop, так и его завершения. В VB оператор цикла Do-Loop имеет две разновид-ти: Do WhileLoop и UntilLoop. Синтаксис:

Do While / Until условие Do

блок операторов ИЛИ блок операторов

Exit Do] [Exit Do]

Loop Loop While / Until условие

Private Sub Proc7_DoWileLoop ()

Dim LotteryEntry As Integer

LotteryEntry = 0

Do While LotteryEntry <> 7

LotteryEntry = Int (10*Rnd ())

Beep

Loop

MsgBox "Ваш номер равен"& LotteryEntry & ".Вы выиграли!!! "

End Sub

Однако цикл Do-Loop позволяет переписать эту процедуру еще несколькими способами.

Private Sub Proc8_DoUntilLoop ()

Dim LotteryEntry As Integer

LotteryEntry = 0

Do Until LotteryEntry = 7

LotteryEntry = Int (10*Rnd ())

Beep

Loop

MsgBox "Ваш номер равен"& LotteryEntry &".

Вы выиграли!!!"

End Sub

Private Sub Proc9_DoLoopUntil ()

Dim LotteryEntry As Integer

Do

LotteryEntry = Int (10*Rnd ())

Beep

Loop Until LotteryEntry = 7

MsgBox "Ваш номер равен"& LotteryEntry &".

Вы выиграли!!!"

End Sub

D программе Ргос9 ключевое слово Do остав. в начале цикла, а условие завершения и ключевое слово Until переместилось в его конец, за ключевое слово Loop. В таком варианте цикл обязат. выполняется хотя бы один раз, поскольку условие завершения не проверя­ется, пока не будут выполнены все операторы из тела цикла. Поэтому можно убрать оператор для инициализации переменной Lottery Entry.

25 Управляющая структура For-Each-Next

Это самый мощный цикл VB. Предназ.для выполнения одной и той же группы действий над каждым объектом семейства или структуры массива. Это особ. выгодно, если точно не известно, ск-ко эл-тов содерж. коллекция. Синтаксис:

For Each элемент In коллекция

блок операторов

Next элемент

Пример: Sub Proc10_ForEachNext ()

Dim CountryArray (5) As String

Dim Country As Variant

CountryArray (1) = "India "

CountryArray (2) = "Peru "

CountryArray (3) = "Greeke "

CountryArray (4) = "Canada "

CountryArray (5) = "Kenya"

For Each Country In CountryArray

MsgBox Country

Next End Sub

В Ргос10 эл-ты массива CountryArray заполняются названием стран, кот. затем по очереди выводятся на экран в структуре For-Each-Next в виде следующего сообщения(MsgBox)

For Each

Ключевые слова, отмечающие начало структуры For-Each-Next.

Country

Переменная, которой присваиваются значения элементов

In

Ключевое слово, отделяющее переменную от группы.

Country Array

группа, т.е. массив или семейство объ­ектов. Кол-во повторений цикла совпадает с числом эл-тов в группе. Переменной цикла при первом вы­полнении присваивается значение первого элемента груп­пы, затем — всех последующих элементов.

MsgBox Country

Действие, которое выполняется над элементом группы.

Next

Ключевое слово, отмеч. конец структуры. Достигнув его, программа возвращается к началу цикла - структуры For Each. Если значение переменной цикла совпадает с последним элементом группы, выполнится последова­тельность операторов, написанная сразу после Next.


26 Оператор Exit

В некоторых случаях необходимо прервать выполнение цикла до его завершения. Это можно сделать с помощью команды безусловного пере­хода Exit (завершает выполнение цикла и передает управление следующей за циклом конструкции). Синтаксис этого оператора внутри цикла For выглядит так:

Exit For. Внутри цикла Do синтаксис оператора Exit Do.

For СчетчикЦикла =НачальноеЗначение То

КонечноеЗначение [Step шаг]

Блок операторов_1

[Exit For]

Блок операторов_2

Next [СчетчикЦикла]

Do [{While / Until} условие]

Блок операторов_1

[Exit Do]

Блок операторов_2

Loop [{While / Until} условие]

Например:

For nCounter=100 To 1 Step -10

nDecades(nCounter) = nCounter * 2

If nDecades(nCounter) > 20 Then Exit For

Next

Оператор Exit служит также для выхода из процедур Sub и Function. Синтаксис операторов в этом случае соответственно Exit Sub и Exit Func­tion. Эти операторы могут находиться в любом месте тела процедуры. Они использ., когда процедура выполнила нужные действия и из нее необходимо выйти.