VBAで0KBファイルが作成される問題

久しぶりの(たぶん日本で数人にしか役に立たないであろう)お役立ち情報です。
VBAで0KBファイルが作成されてお困りの方がいればご参照ください。
ドキュメントの中に0KBのファイルが散乱している方は当記事を読んでハッとすることがあるかもしれません。

謎の0KBファイル

VBAを使っていれば他のファイル操作はやりたくなるものですよね。
すると、ファイルが開かれているかのチェックが必要になります。

Function IsBookOpened(FilePath) As Boolean
On Error Resume Next
Open FilePath For Binary Lock Read Write As #1
Close #1
IsBookOpened=CBool(Err.Number>0)
On Error GoTo 0
End Function

当記事にご興味を抱いて頂いた方は、たぶん一度は目にされたよくあるコードだと思います。
ファイルを開いてチェックしているため、0KBのファイルが作成される事があります。

これが原因じゃなかったら期待外れですみません!

デフォルトでは「ドキュメント」配下に作成されるかと思います。
「Application.GetOpenFilename」でファイルを指定したときはそのフォルダ配下に作成されます。
たぶん「chdir」コマンドでディレクトリを変えてもそうなるのかな?

対処方法

私はワークブックのチェックはこんな感じに変えました。

Function IsBookOpened(FilePath) As Boolean
Dim WB As Workbook
On Error Resume Next
Set WB = Workbooks(Dir(FilePath))
IsBookOpened=CBool(Err.Number=0)
On Error GoTo 0
End Function

ただ、これですとテキストのチェックはできないので、先のチェックと分けて使うようにしています。

終わりに

私も原因や対処方法の正解がわかりません。
もっと良い案や真の原因、そもそも使い方おかしいよ等のご指摘があれば教えて頂ければ幸いです。
ただ、謎の0KBの原因がこのファイルチェックという可能性がある事は有意義な情報ではないでしょうか?

0
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存