Короткий ответ на ваш первый вопрос: «вы не должны помещать обработчик ошибок в каждую процедуру».
Сказать, что «каждая процедура должна иметь обработчик ошибок», в общем, является ужасным советом. Недостатки при обработке ошибок VBA обсуждались в других местах. Концептуально, однако, это не все, что отличается от более стандартной формы обработки исключений, найденной на других языках. Большинство из лучших практик этих языков применяются. Вы должны обрабатывать ошибки на самом низком уровне, где их обработка имеет смысл. Иногда это происходит в процедуре, где произошла ошибка, во много раз нет.
Например, у VBA UDF, вызванного с вашего листа, обязательно должен быть EH, который гарантирует, что вы вернете значение ошибки Excel в вызывающую ячейку (я) вместо того, чтобы отбрасывать пользователя в редактор кода с сообщением об ошибке. Однако код, который вы вызываете из этого UDF, может и не понадобиться. На самом деле, часто самая значимая вещь, которую может выполнять внутренняя подпрограмма при возникновении ошибки, - это просто позволить ей пройти по стеку, чтобы она могла достичь кода, который знает, что с ним делать. Это действительно зависит от рутины.
Ответ на ваш второй вопрос заключается в том, что автор, похоже, не очень хорошо разбирается в обработке исключений.Он признает, что обработка ошибок специфична для контекста, но затем кажется, что каждая процедура должна локально решать между «исправлять проблему прямо здесь и возобновлять выполнение» и «завершать программу». Он оставляет обычно правильный вариант, который «очищается локально и поднимает проблему наверху». Таким образом, подпрограммы, которые не нуждаются в очистке локально, должны просто допускать ошибки «пузыриться».
-1 Пожалуйста, не используйте сокращенные URL-адреса. Никто не любит следить за слепыми ссылками на работе. (+1 доступно по прямой ссылке.) – Oorang