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