ファイルが開けないなどの、実行時に発生するエラーを捕らえるにはOn Errorを使う。
これ以外の方法では捕らえられないし、On Errorを使うのはごく普通の話。

余談
C言語などでは関数の戻り値でエラーをチェックするが、エラー処理が煩雑になる、
エラーチェックをしなければエラーであってもそのまま処理が続行されるなどの問題があり、
VBではそれが改良されて実行時エラーが発生する方式になっている。
C++、C#、VB.NETなどではtry-catchを使用する。これはさらに改良されており、
エラー情報がエラー番号、エラーメッセージだけでなく、任意のオブジェクトになっている。