| 
    
     |  | おはようございます。 >>私なら、
 >>
 >>On Error Resume Next
 >>MkDir desktop & "\更に下のフォルダ"
 >>On Error GoTo 0
 >>
 >>としますけどね!!
 >
 >フォルダの存在チェックだけでは甘いということでしょうか?
 >On Error 〜
 >は、なんとなく本質的な回避処理ではないように思えるのですが、違いますでしょうか?
 >なんでもかんでも、
 >On Error 〜
 >で回避したほうがよいということなのでしょうか?
 
 あっはは、私、「なんでもかんでも、On Error」なんて趣旨の発言をどこかでしましたっけ?
 
 上記の記述を読むと、「なんでもかんでも、On Errorは使いたくない」
 というような印象を受けましたよ!!
 
 かみちゃんさんは以前にもOn Errorの件で意見交換をさせて頂いたことがありましたね?
 
 私がファイルI/OでOn Error 〜を使うのは、基本的には、
 www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=23067;id=excel
 ↑ここでちゃっぴさんが言っていることと同じ理由です。
 
 >いちいち、全部のCaseを洗い出してCheckするとなると
 >工数もかかりますし、何より複雑になってわかりづらくなります。
 
 と、おっしゃっていますが、
 
 私がちょっと言い換えればファイルI/Oや人の作った
 オブジェクト等は、考え得るエラーを全部列挙する(コードでエラーチェックする)事などできない と思っています。
 
 よって、On Error 〜で予想できないエラーも拾ってもらった方がよい というのがOn Error 〜を使用する理由です。
 
 想定できない と言ってもエラーが発生するステートメントは特定はしていますよね?
 
 
 Mkdirステートメントについても同じです。
 デスクトップの下にフォルダを作るという今回の事象では、
 私も既に存在するフォルダを作成しようとしている(実際には、「パスが無効です」)
 以外のエラーは殆どないと思いますが、一般的にMkdirステートメントで発生するエラーとなれば、上記以外にもあるかもしれませんよ!!
 FAT16やFAT32のファイルシステムを使っていれば、
 作成できるファイル(フォルダ)数には、制限がありますよね?
 (FAT16なんて、ルートディレクトリは512でしたっけ?)
 FDにフォルダを作成するなんてことも想定すれば、もっと少ない数も想定しなければなりません(試さない方がよいですよ、FDのファイル作成数限界なんか試すとWin98辺りだとシステムに支障きたすかもしれません。以前試したら、おかしくなってOSをいれなおした覚えがあります)
 On error 〜なら、これらの想定していないエラーも拾ってくれます。
 
 ここでの投稿では、趣旨と異なれば、付けないコードを投稿する場合もありますが、
 私は実務では、ファイルI/OやADOやWSHなど(想定できないエラーが発生するかもしれない事象)は、殆どラップしたプロシジャーを用意します。
 例
 Function openfile_input(filepath As Variant) As Long
 On Error Resume Next
 Dim flno As Long
 flno = FreeFile
 Open filepath For Input As #flno
 openfile_input = Err.Number
 On Error GoTo 0
 End Function
 上記のようなコードをCallしている呼び出し元では、戻り値でエラーチェックを行います。
 
 >On Error 〜
 >は、なんとなく本質的な回避処理ではないように思えるのですが、違いますでしょうか?
 私は、この想定できないエラーも拾ってくれるようなエラー処理は、
 On Error 〜を使う以外の方法があるのなら知りたいと思っています。
 
 ON Error を使うことが「本質的な回避処理ではない」という場合も
 あるでしょうね!!
 
 |  |