Объектно-ориентированный подход в программировании. Проектирование и реализация приложений в среде Microsof Office. Евсеева О.Н. - 100 стр.

UptoLike

Составители: 

1.5. Отладка программ и обработка ошибок 101
3
Кроме того, обработка непредвиденной ошибки может включать ее повторный
вызов с тем, чтобы ее мог перехватить следующий обработчик в списке
вызовов. Повторный вызов ошибки дает возможность перехватить ее другому
обработчику ошибок, который находится на следующем уровне в стеке
вызовов. В этом случае блок Case Else может выглядеть так:
' …
Case Else
Dim intErrNum As Integer
intErrNum = Err.Number
' Сбрасываем объект Err
Err.Clear
' Повторно генерируем ошибку
Err.Raise Number:=intErrNum
End Select
' …
Различные уровни стека вызовов обработчиков ошибок образуются в
результате включения подпрограмм обработки ошибок в различных
процедурах VBA, вызывающих друг друга. Важно различать включение и
активизацию обработчика ошибок.
Включенным
(enabled) считается
обработчик, установленный инструкцией On Error, а
активным
(active) –
тот, чей код выполняется в данный момент. Чтобы активизировать обработчик,
его нужно сначала включить, но не все включенные обработчики активны.
Например, после выполнения инструкции Resume обработчик
деактивизируется, но остается включенным.
Когда ошибка происходит в процедуре, в которой нет своей подпрограммы
обработки ошибок, или в активном обработчике ошибок, VBA просматривает
список вызовов в поисках другого включенного обработчика. Список вызовов
последовательность вызванных процедур, которая привела в данную точку
потока управления; он отображается в диалоговом окне Стек Вызова. Это
окно может быть открыто только в режиме прерывания ( Команда ¾ Вид ¾
Стек вызова в редакторе VBA).
Допустим такую последовательность вызовов:
Процедура обработки события вызывает процедуру А.
Процедура А вызывает процедуру В.
Процедура В обращается к процедуре С.
Пока выполняется процедура С, другие процедуры приостанавливаются. Если в
процедуре С возникнет ошибка и в ней не окажется включенного обработчика
ошибок, Visual Basic начнет просматривать процедуры в списке вызовов:
сначала В, потом А и, наконец, дойдет до исходной процедуры обработки
события (на ней этот процесс и закончится). При этом Visual Basic выполнит