Вместо того чтобы включать обработчик ошибок в каждую процедуру, можно создать централизованный обработчик ошибок - отдельную функцию, которая будет перехватывать ошибки, а затем, основываясь на номере ошибки, выполнять те или иные действия. Но все равно каждая процедура, в которой предусмотрена обработка ошибок, будет иметь оператор On Error. При возникновении ошибки этот оператор обращается к процедуре обработки ошибок, для которой функция-централизованный обработчик ошибок возвращает число, определяемое типом ошибки. Затем с помощью оператора Select Case выбирается оператор, осуществляющий выход из обработчика ошибок. Возможны следующие операторы выхода. (Оператор Resume описан выше.)
Оператор Resume.
Оператор Resume Next.
Оператор Resume метка.
Оператор Exit - выход из процедуры.
Оператор End - завершение приложения.
Обычно в локальную процедуру обработки ошибки функция-централизованный обработчик возвращает целое значение из интервала от 1 до 5 (как показано ниже), но это не правило, и вы можете создать свой централизованный обработчик, который будет более дифференцированно различать типы ошибок.
Опишем процесс создания централизованного обработчика ошибок.
Добавьте новый модуль в рабочую книгу и создайте функцию с именем HandleErrors.
Функция HandleErrors имеет следующий код:
Function HandleErrors(iErrNum) As Integer
Select Case iAction
Case 5
'Неправильный вызов процедуры
MsgBox Error(iErrNum) & "Обратитесь к справке"
iAction =2
Case 7
'He хватает оперативной памяти
MsgBox "Закройте все неиспользуемые приложения"
iAction = 1
Case 11
'Деление на ноль
MsgBox "Деление на ноль. Введите другое значение"
iAction = 1
Case 48,49,51
'Ошибка загрузки библиотек DLL
MsgBox iErrNum & "Обратитесь к справке"
iAction = 5
Case 57
'Ошибка ввода-вывода
MsgBox "Вставьте дискету в дисковод А:"
iAction = 1
Case Else
MsgBox "Неопознанная ошибка"
iAction = 5
End Select
ErrorHandle = iAction
End Function
Перейдите в процедуру ПримерОбработчик (она находится в другом модуле).
Приведите код этой процедуры к следующему виду (изменения в коде выделены полужирным шрифтом):