Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие по VBA(Курица).docx
Скачиваний:
30
Добавлен:
17.11.2019
Размер:
2.71 Mб
Скачать
    1. Конструкция If . . . Then . . . Else

Конструкция If . . . Then . . . Else определяет несколько блоков операторов, один из которых будет выполняться в зависимости от условия:

If условие1 Then

выражение1

ElseIf условие2 Then

выражение2

. . .

Else

выражение-n

End If

При выполнении сначала проверяется условие1. Если оно ложно, VBA проверяет следующее условие2 и т. д., пока не найдет истинного условия. Найдя его, VBA выполняет соответствующий блок операторов и затем передает управление инструкции, следующей за оператором End if. В данную конструкцию можно включить блок оператора Else, который VBA выполняет, если не выполнено ни одно из условий.

Конструкция If . . . Then . . . ElseIf в действительности всего лишь специальный случай конструкции If . . . Then . . . Else. Заметим, что в данной конструкции может быть любое число блоков ElseIf, или даже ни одного. Блок Else можно включать независимо от присутствия или, наоборот, отсутствия блоков ElseIf.

Рассмотрим пример вычисления функции:

Запишем код программы:

Sub пример1()

Dim a As Single, b As Single, x As Single

Dim z As Double

Call read("A1", a)

Call read("B1", b)

Let x = CSng(InputBox("введи x", "Ввод данных", 0))

If x <= a Then

z = Sin(x)

ElseIf x >= b Then

z = Tan(x)

Else: z = Cos(x)

End If

Call out("C1", z)

End Sub

Заметим, что можно добавить любое число блоков Elself в конструкцию If . . . Then. Однако количество блоков Elself может стать настолько большим, что конструкция If . . . Then станет очень громоздкой и неудобной. В подобной ситуации следует применять другую конструкцию принятия решения - Select Case.

Пример 1. Рассчитать температуру при условии кипения воды или вода будет превращаться в пар (рис. 25.).

Рис. 25. Результат программы примера 1.

Пример 2. С помомощью оператора If..Then..Else (вложение операторов) рассчитать возраст людей для определения социального статуса (рис. 26.).

Рис. 26. Результат программы примера 2.

(сочетание символов «пробел» и _ - переход на другую строку)

    1. Конструкция Select Case

Конструкция Select Case является альтернативой конструкции If . . . Then . . . Else в случае выполнения блока, состоящего из большого набора операторов. Конструкция Select Case предоставляет возможность, похожую на возможность конструкции If . . . Then . . . Else, но в отличие от нее она делает код более читаемым при наличии нескольких вариантов выбора.

Конструкция Select Case работает с единственным проверяемым выражением, которое вычисляется один раз при входе в эту конструкцию. Затем VBA сравнивает полученный результат со значениями, задаваемыми в операторах Case конструкции. Если найдено совпадение, выполняется блок операторов, ассоциированный с оператором Case:

Select Case проверяемое_выражение

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

[блок_операторов 1]]

[Case список_выражений 2

[блок_операторов 2]]

. . .

[Case Else

[блок_операторов n]]

End Select

Каждый список выражений является списком из одного или более значений. Если в одном списке больше одного значения, они отделяются запятыми. Каждый блок операторов содержит несколько операторов или ни одного. Если окажется, что вычисленному значению проверяемого выражения соответствуют значения из нескольких операторов Case, то выполняется блок операторов, ассоциированный с первым оператором Case из всех найденных соответствий. VBA выполняет блок операторов, ассоциированный с оператором Case Else (заметим, что он необязателен), если не найдено ни одного соответствия проверяемого значения выражения и значений из всех списков операторов Case.

Рассмотрим пример:

В зависимости от значения переменной iTest, строковой переменной strResult присваиваются различные значения:

Select Case iTest

Case 1     strResult = "iTest = 1" Case 2, 3, 4     strResult = "iTest = 2, 3 или 4" Case 5 To 9     strResult = "iTest находится в диапазоне от 5 до 9" Case iTest < 0     strResult = "iTest меньше 0" Case Is > 9     strResult = "iTest больше 9" Case Else     strResult = "iTest равно 0"

End Select

Рассмотрим следующий пример вычисления функции:

Запишем программу:

Sub пример2()

Const pi2 = 1.57

Dim x As Single

Dim z As Double

Let x = CSng(InputBox("введи x", "Ввод данных", 0))

Select Case x

Case -pi2

z = Sin(x)

Case 0

z = Cos(x)

Case pi2

z = Tan(x)

Case Else

MsgBox "Неверные исходные данные!"

Exit Sub

End Select

Call out("D1", z)

End Sub

Заметим, что конструкция Select Case вычисляет выражение только один раз при входе в нее, а в конструкции If . . . Then . . . Else вычисляются различные выражения для каждого оператора Elself. Конструкцию If . . . Then . . . Else можно заменить конструкцией Select Case, только если оператор If и каждый оператор Elself вычисляют одно и то же выражение.