Шаг 12 - Обработка ошибок VBA

Программирование это как хождение по минному полю. Неизвестно где взорвешься. Наверно так. Вы наслышаны о том, что Windows напичкан ошибками, о том что среда разработки любая при том - тоже. Мне попадались исследования на эту тему. Типа, что на каждые 1000 строк кода одна ошибка, у хорошего программиста естественно :-). В общем это закон такой. Все равно ошибешься где-нибудь. Проводя аналогию между женщиной и компьютером :-))) вообщем понятно.

Для обработки ошибок в VBA и VB есть специальный оператор On Error. Его задача при возникновении ошибки передать управление в то место( процедура или кусок кода), в котором это ждут. Посмотрим пример:

Sub Test()
	On Error GoTo Errors1
	Dim x As Integer
	Dim a As Integer
	Dim c As Double
	x = 20
	a = 0
	c = x / a
	MsgBox (" Этого не должно быть")
	GoTo Ends:
Errors1:
	MsgBox ("Ну ты блин Тикурила Даещь")
Ends:
End Sub

В данном примере при возникновении ошибки управление передается по метке Errors1 и дальше выполняется код. Я понимаю, что прерывать функцию из-за ошибки не всегда надо. И не только я так думаю, создатели VBA тоже так считали, и поэтому есть оператор Resume Next. Этот оператор реализует небезызвестный принцип - Ни шагу назад. Выполнение пойдет дальше, несмотря на ошибку.

Sub Test()
	On Error GoTo Errors1
	Dim x As Integer
	Dim a As Integer
	Dim c As Double
	x = 20
	a = 0
	c = x / a
	MsgBox ("Опаньки !!!")
	GoTo Ends:
Errors1:
	MsgBox ("Ну ты блин Тикурила Даещь")
	Resume Next
Ends:
End Sub

А вот, если Вы вообще не хотите ничего говорить по поводу ошибки, то можете поступить очень сурово. Вот так. Я рекомендую применять это для бухгалтерских расчетов. Ни кто и не догадается :-)))

Sub Test()
	On Error Resume Next
	Dim x As Integer
	Dim a As Integer
	Dim c As Double
	x = 20
	a = 0
	c = x / a
	x = 10
	a = 3
	c = 10 / 3
	MsgBox ("Опаньки !!!")
End Sub

Над резюме можно немного поэкспериментировать, вот возможные описания:

Resume Next
Resune строка
Resume метка
Resume 0

Пример ниже будет упорно требовать, чтобы ввели число отличное от 0:

Sub Test()
	On Error GoTo Error1
	Dim x As Integer
	Dim a As Integer
	Dim c As Double
	x = 20
	a = Str(InputBox("введите число"))
	c = x / a
	x = 10
	MsgBox ("Опаньки !!!")
	GoTo Ends:
Error1:
	MsgBox ("думай о программировании, а не о женщинах")
	a = Str(InputBox("введите число"))
	Resume 0
Ends:
End Sub

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.