ここでは「Goto XX」で説明します。
上記はプロシージャ「親」から子供1、子供2プロシージャをコールしています。
そして親プロシージャの先頭でエラートラップしています。この場合、エラーが発生すると「ErrHandler」に勝手に制御が飛んでいき、メッセージを表示して処理が終了されます。
既にお気づきの方もいるかもしれませんが、これ自体でエラー内容が隠蔽されているわけです。
例えば、利用者から「予期せぬエラーでメッセージが出て終了したけど・・」と言われても、解決できる情報が少なすぎますね。
むしろこれだったら「実行時エラーが出て、『インデックスが有効範囲にありません。』と出たよ」と言われた方が解決できる情報に近づくわけです。
できればデバッグボタン押して黄色でハイライトされたコードも知れるとかなり助かりますが(笑)。
ただし、もちろんエラーの傾向などが類推できれば、Select Case(やIF)とErr.Numberを併用して、より本来のエラー原因に近いメッセージを出すことは可能です。しかしそれだったら、初めから関連するだろう部分をもっと深く広くテストして、エラー自体を潰してしまった方がスマートにも思えます。この辺は好みだけでなく、会社としてのコーディング規則もあるので一概には言えないですが。。
いずれにしても、このようにエラートラップをすることで解決が困難になることもあります。かといって、実行時エラーばかり見せるわけにもいかないのが、辛いところです。
従い、処理が正しく行われているかどうかをバックグランドで押さえておくためにエラーログ(機能)も同時に入れるなどした工夫が必要になってきます。