www.ПЕРВЫЕ ШАГИ.ru :: Шаг 13 - Объект Err

VBA

Шаг 13 - Объект Err

Да, странное совпадение, 13 шаг и зловещий обьект Err, от которого одни неприятности. Этот обьект хранит информацию о последней ошибке в результате выполнения того, что вы запрограммировали. Ну давайте попробуем.

Sub Test()
	On Error GoTo Error1
	Sheets.Item(1000).Delete
	GoTo Ends
Error1:
	MsgBox "Error detected" 
	MsgBox (Str(Err.Number))
	MsgBox (Err.Source)
	MsgBox (Err.Description)
Ends:
End Sub

Итак, Number - это номер ошибки Source, где она появилась, а Description описание. В данном случае Вам скажут о выходе за гарницу массива. Вот это здорово. Особенно при создании программ. Получить такое сообщение пользователю не очень приятно, а вот программисту :-)) даже думать не надо.

У объекта Err есть метод очистки Clear, он все очишает. Вот в этом случае Вы не получите никаких сообщений. После обработки ошибки неплохо применить этот метод. Так, ради профилактики.

Sub Test()
	On Error GoTo Error1
	Sheets.Item(1000).Delete
	GoTo Ends
Error1:
	Err.Clear
	MsgBox "Error detected"
	MsgBox (Str(Err.Number))
	MsgBox (Err.Source)
	MsgBox (Err.Description)
Ends:
End Sub

Нельзя не сказать, что этот обьект автоматически очистится после ..

Resume
Exit Sub(Function)
On Error

При отладке или специально в программе вы и сами можете сгенирировать ошибку методом Raise, только надо знать, что ошибки до 1000 зарезервированы VBA, а максимальный код 65535. Любое правило подвержено изменениям и поэтому есть специальная константа, от которой вы можете сложением получать коды ошибок. Она называется vbObjectError.

Sub Test()
	On Error GoTo Error1
	Err.Raise 1001, "Test()", "Это я сделал"
Error1:
	MsgBox "Error detected"
	MsgBox (Str(Err.Number))
	MsgBox (Err.Source)
	MsgBox (Err.Description)
Ends:
End Sub


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