Ошибки, которые не обрабатываются локально, всегда будут * попадать в ловушку обработчиком ошибок верхнего уровня, если для параметра улавливания ошибок установлено значение «Перерыв по необработанным ошибкам». Этот параметр вы найдете в среде IDE в разделе «Параметры».
Если установлено значение «Перерыв во всех ошибках», обработчик ошибок (ни локальный, ни верхний стеки) не будет вызываться. Если он настроен на «Break in Class Module», не будет обработан обработчик ошибок вне класса для ошибки в классе.
Обратите внимание, что эта опция изменяет строку, на которой отключается отладчик: когда необработанная ошибка возникает в модуле класса, отладчик останавливается в строке, вызывающей класс, с помощью «Break on Unhandled Errors» или на линии нарушения в класса с модулем «Break in Class».
В Access эта опция может быть прочитана программно с помощью Application.GetOption («Ошибка захвата») и Application.SetOption («Ошибка ловушки»).
* Как писал RBarryYoung, самые фатальные ошибки (например, ошибки переполнения стека) не будут улавливаться какой-либо обработкой ошибок VBA.
Спасибо за ответ. Это то, что я думал, и это, похоже, в 99% случаев. Но время от времени функция будет иметь ошибку, и вместо того, чтобы свернуться, я получаю окно ошибки VBA (с отладкой и т. Д.). Я не понимаю, почему. – 2009-08-26 16:58:06
Мне нужен более конкретный пример для комментариев. – RBarryYoung
Ооо! +1 для дополнительных объяснений («2 кажущихся исключения»). – Smandoli