Ветвления на языке VBA

Необходимость обработки критических ситуаций возникает при программировании довольно часто.

Например, при решении задачи: вычислить значение выражения .

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 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. Вычислить значение выражения

Решение.

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. Вычислить площадь треугольника по трем известным сторонам.

Решение.

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. Вычислить площадь треугольника по трем известным сторонам.

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

Пояснение решения.

Программа вычисляет площадь треугольника, правильно обрабатывая исключительные ситуации.