
- •№3 Ide Элементы интегрир. Среды
- •2. Использование методов в коде процедур
- •3. Создание программного кода для обработки события объекта
- •5.2.2. Свойства объектов формы
- •5.2.3. Действия, выполняемые с объектами формы
- •5.2.4. Настройка параметров формы
- •5.2.5. События и методы формы
- •5.3. Порядок создания приложения
- •If условие1 Then
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 While …Loop и Until …Loop. Синтаксис:
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 Function. Эти операторы могут находиться в любом месте тела процедуры. Они использ., когда процедура выполнила нужные действия и из нее необходимо выйти.