|
おはようございます。
>>私なら、
>>
>>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 を使うことが「本質的な回避処理ではない」という場合も
あるでしょうね!!
|
|