Необходимость обработки критических ситуаций возникает при программировании довольно часто.
Например, при решении задачи: вычислить значение выражения .
Sub выражение6() Dim x, y, z As Double x = Val(InputBox("Введите x=")) y = Val(InputBox("Введите y=")) z = (x + y) / (x - y) MsgBox ("z=" + Str(z)) End Sub
При вводе значений x = 3, y = 3 программа прекратит работу и выдаст сообщение
о прекращении работы, так как произошло деление на 0. Нажатие на кнопку Debug позволяет перейти в строку, в которой состоялась ошибка выполнения (Run-time error).
Преобразование программы
Необходимо, преобразовать программу следующим образом:
Sub выражение7() Dim x, y, z As Double x = Val(InputBox("Введите x=")) y = Val(InputBox("Введите y=")) If x - y <> 0 Then z = (x + y) / (x - y) MsgBox ("z=" + Str(z)) Else MsgBox ("Знаменатель равен =0") End If End Sub
Для организации ветвлений в языке VBA предусмотрено несколько операторов: If и Select Case.
Общий вид оператора If:
If выражение Then [инструкции] [ElseIf выражение-<em>n</em> Then [<em>иначе_если_инструкции</em>] ... [Else [иначе_инструкции]] End If
Выражение должно возвращать логическое значение: истина или ложь (True или False).
Общий вид оператора Select
Общий вид оператора Select Case:
Select Case выражение [Case выражение<em>-n</em> [инструкции <em>-n</em>]] ... [Case Else [иначе_инструкции]] End Select
Пример использования Select Case.
Sub пример_select_case() Dim Number Number = 8 Select Case Number Case 1 To 5 MsgBox "Между 1 и 5" Case 6, 7, 8 MsgBox "Между 6 и 8" Case 9 To 10 MsgBox "Между 9 и 10" Case Else MsgBox "Не в диапазоне от 1 до 10" End Select End Sub
При программировании исключительных ситуаций необходимо предусмотреть все возможные случаи. Поясним это на примерах.
Пример 1
Пример 1. Вычислить значение выражения
Решение.
Sub выражение8() Dim x, y, z As Double x = Val(InputBox("Введите x=")) y = Val(InputBox("Введите y=")) If x - y <> 0 And x > 0 Then z = (x + y) / (x - y) + Sqr(x) MsgBox ("z=" + Str(z)) Else MsgBox ("Выражение не имеет смысла") End If End Sub
Пояснение решения.
Исключительная ситуация возникает, когда в знаменателе получается нуль и подкоренное выражение меньше нуля.
Пример 2
Пример 2. Вычислить площадь треугольника по трем известным сторонам.
Решение.
Sub Герон3() Dim A, b, c, p, s As Double A = Val(InputBox("Введите a=")) b = Val(InputBox("Введите b=")) c = Val(InputBox("Введите c=")) If (A + b > c) And (A + c > b) And (b + c > A) Then p = (A + b + c) / 2 s = Sqr(p * (p - A) * (p - b) * (p - c)) MsgBox ("s=" + Str(s)) Else MsgBox ("Треугольник не существует") End If End Sub
Пояснение решения.
Предложенная программа проверяет существование треугольника, и не будет работать при введенных отрицательных значениях a, b, c.
Правильное решение в примере 3.
Пример 3
Пример 3. Вычислить площадь треугольника по трем известным сторонам.
Sub Герон4() Dim A, b, c, p, s As Double Dim d1, d2, tr_ok As Boolean A = Val(InputBox("Введите a=")) b = Val(InputBox("Введите b=")) c = Val(InputBox("Введите c=")) d1 = (A >= 0) And (b >= 0) And (c >= 0) d2 = (A + b > c) And (A + c > b) And (b + c > A) tr_ok = d1 And d2 If tr_ok Then p = (A + b + c) / 2 s = Sqr(p * (p - A) * (p - b) * (p - c)) MsgBox ("s=" + Str(s)) Else MsgBox ("Треугольник не существует") End If End Sub
Пояснение решения.
Программа вычисляет площадь треугольника, правильно обрабатывая исключительные ситуации.