Шаг 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
Предыдущий Шаг | Следующий Шаг
Автор Каев Артем.