Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3489 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Лекция 8:

Операторы

< Лекция 7 || Лекция 8: 123456 || Лекция 9 >

Управляющие операторы

Набор управляющих операторов VBA делает честь любому хорошо структурированному языку программирования. Циклы с возможной проверкой условия в начале, в конце и в середине работы оператора, обычный оператор If и оператор разбора случаев Case - все эти средства позволяют организовать процесс вычислений надежно и эффективно в соответствии с лучшими традициями программирования.

Условный оператор If Then Else End If

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

Синтаксис.

Имеется два варианта синтаксиса: в одну строку и в форме блока. В первом случае он имеет вид:

If условие Then [операторы1] [Else операторы2 ]

Во втором случае оператор расположен на нескольких строках:

If условие Then
[операторы]
[ElseIf условие-n Then
[операторы-n]...
[Else
[ИначеОператоры]]
End If

Здесь условие обязательно в обоих вариантах. Оно может быть числовым или строковым выражением со значениями True или False ( Null трактуется как False ). В качестве условия можно использовать и выражение вида TypeOf ИмяОбъекта Is ТипОбъекта, где ИмяОбъекта - ссылка на объект, а ТипОбъекта - произвольный корректный тип объекта. Операторы1 и операторы2 - это последовательности из одного или нескольких разделенных двоеточием операторов. По крайней мере, одна из этих последовательностей должна быть непустой. Если условие истинно ( True ), выполняется последовательность операторы1, ложно ( False ) - операторы2. Форма условного оператора определяется по наличию в строке, начинающейся If условие Then, текста после Then, отличного от комментария. Если такой текст есть, считается, что использована форма в одну строку, нет - оператор должен иметь форму блока. В этом случае подблоки вида:

[ElseIf условие-n Then
	[операторы-n]

могут отсутствовать либо повторяться несколько раз; подблок:

[Else
	[ИначеОператоры]]

также необязателен, а закрывающий оператор End If необходим. По крайней мере одна из последовательностей операторы, операторы-n … или ИначеОператоры должна быть непустой. Если условие истинно, выполняются операторы, нет - отыскивается первое истинное условие-n, и выполняются операторы-n. Если все эти условия ложны, выполняются ИначеОператоры. После выполнения одной (возможно, пустой) последовательности операторов управление передается оператору, следующему за End If.

Примеры:

Public Sub MinMax1(ByVal X As Integer, ByVal Y As Integer, _
		Min As Integer, Max As Integer)
		'Оператор If	в одну строку
		If X > Y Then Max = X: Min = Y Else Max = Y: Min = X

End Sub

Public Sub MinMax2(ByVal X As Integer, ByVal Y As Integer, _
		Min As Integer, Max As Integer)
		'Оператор If	в виде блока
		If X > Y Then
			Max = X
			Min = Y
		Else
			Max = Y
			Min = X
		End If
		
End Sub

Public Sub If1()
		Dim Max As Integer, Min As Integer
		
		Call MinMax1(2 + 3, 2 * 3, Min, Max)
		Debug.Print Max, Min
		Call MinMax2(2 + 3, 2 * 3, Min, Max)
		Debug.Print Max, Min
End Sub
7.2.

По-видимому, можно было бы классифицировать программистов в зависимости от того, какая из форм записи процедуры MinMax кажется им предпочтительнее при записи и при чтении. Приведем еще один пример, где идет работа с объектами. Вначале добавим еще один класс объектов:

'Класс Man
'Свойства
Public Age As Byte
Public Name As String
'Другие свойства и методы пока не определены

А теперь приведем процедуру, в которой будем работать с объектами класса Child и Man. Заметьте, в условии оператора IF проверяется тип объекта:

Public Sub BoyOrMan()
	Dim Boy As New Child
	Dim Person As New Man
	Dim SomeBody As Object
	Dim Answer As Integer
		
	Boy.Age = 10: Boy.Name = "Александр"
	Person.Age = 21: Person.Name = "Александр"
	Answer = InputBox("Введите число от 10 до 20", "Возраст", 15)
	If Answer > 15 Then
		Set SomeBody = Person
		Else: Set SomeBody = Boy
	End If
		
	If TypeOf SomeBody Is Child Then
		Debug.Print "Это мальчик!"
	ElseIf TypeOf SomeBody Is Man Then
		Debug.Print "Это Мужчина"
	Else
		Debug.Print "Не знаю, кто это"
	End If
End Sub
7.3.

Результат ее работы зависит от того, какой возраст Вы введете в окне ввода.

Оператор выбора Select Case

Этот оператор производит разбор случаев и в зависимости от значения анализируемого выражения выбирает и исполняет одну из последовательностей операторов.

Синтаксис.

Select Case Выражение-тест
[Case СписокВыражений-n
	[операторы-n]]
[Case Else
	[ИначеОператоры]]
End Select

Выражение-тест должно присутствовать обязательно. Оно может быть произвольным выражением с числовым или строковым значением. СписокВыражений-n должен присутствовать в строке, начинающейся ключевым словом Case (Случай). Выражения в этом списке отделяются запятыми и могут иметь одну из форм:

  1. выражение,
  2. выражение-нижняя-граница To выражение-верхняя-граница,
  3. Is оператор-сравнения выражение.

Первая форма задает отдельные значения, вторая и третья позволяют задавать сразу целые диапазоны (области) значений. Последовательность операторов операторы-n необязательна. Она будет исполнена, если соответствующий СписокВыражений-n является первым списком, сопоставимым с текущим значением Выражения-теста (т. е. он явно содержит это значение, либо оно попадает в один из заданных в списке диапазонов). После исполнения операторов последовательности операторы-n проверка на соответствие другим спискам выражений не производится, и управление передается на оператор, следующий за End Select. Необязательная последовательность ЕслиОператоры выполняется, если ни один из списков выражений несопоставим со значением Выражения-теста.

Пример:

Public Sub Case1()
	Dim Before As Integer
	Dim CurrentYear As Integer, Str As String

	' Инициализация переменных:
	CurrentYear = 1999
	Before = InputBox("Сколько лет тому назад?", "Когда", 10)
	
	Select Case CurrentYear - Before
		Case 1954 To 1969, 1971 To 1974, 1982, Is < 1970
			Str = " Годы учебы"
		Case 1972 To 1989
			Str = "Годы воспитания"
		Case Else
			Str = "Прочие годы"
	End Select
	Debug.Print Str

End Sub

Здесь, если перед выполнением выбора Before = 20, значением тестового выражения будет 1979, и будет работать второй вариант (" Годы воспитания "). При Before = 25 значение 1974 сопоставимо с двумя списками, но для исполнения будет выбран лишь первый вариант (" Годы учебы ").

Диапазоны значений можно задавать и для строк. При этом их значения считаются упорядоченными лексикографически. Например, возможен такой список выражений:

Case "everything", "nuts" To "soup"

Задаваемое им множество строк включает строку " everything " и все строки от " nuts " до " soup " (например, " onion ").

< Лекция 7 || Лекция 8: 123456 || Лекция 9 >
полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.