【恐怖】VBA Workbooks.Openでファイルが消える!
こんにちは。
派犬事務員のコロ子です。
何年か前に作ったマクロで事件が起きた。
Aさん:「コロ子!大変!!!ファイルが無くなっちゃった!!!」
コロ子:「え!?どうしたんですか?」
Aさん:「間違った入力をしてボタン押したら、ファイルが無くなっちゃったの!」
え!?そんな事ある??
確認してみると、フォルダ内にあるはずのファイルが消えている。
コードを見てもファイル削除の処理は入っていない。
ファイルが無くなったのはマクロのせいじゃないよ、と思いながらフォルダの中に適当なファイルを入れて同じように実行してみたら、ファイルが消えている!
ファイル削除の処理は入ってないのに!何で!?
どうやら
入力が間違っていたことが原因でファイル名が取れず、ファイル名が空の状態でファイルオープンするとエラーが起こり(これは当然)、そしてフォルダ名の配下のファイルが削除される、らしい。
更に、削除されるファイルとそうでないファイルがある。
Dim fileName As String fileName = ファイル名を取得する処理 ←何らかの原因で””(空)が入る Workbooks.Open フォルダ名 & "\" & fileName ←ファイル名が空で開く
原因究明のために自分のPCに同じような環境を作ってマクロを実行してもファイルが消えない。
どうやっても再現できない。
分かった事
①ファイル名が空("")でWorkbooks.Openを実行するとパス配下のファイルが削除される
②ネットワーク上で起こる(ローカル環境では起こらない)
③ファイル名の先頭文字がアルファベットのものは削除されない
確かに雑なマクロを作ったコロ子が悪い。
でもファイルが削除されるなんて酷過ぎる!Workbooks.Openでファイルが削除されるなんてどこにも書いてないよ!
たまたま重要なファイルがアルファベットから始まっていたので今回は助かった。でもそうじゃなかったら本当にヤバイ!!
これって、本当に死んじゃうやつだよ!
Microsoftさん、こんなのありですか!!!!
使うの自分だけだからとか、限られたグループで使うだけだからエラーが出てもまあいいや、みたいな作り方してると超危険。
必ず、ファイル名がある事を確認してからファイルを開くべし!
Dim fileName As String fileName = ファイル名を取得する処理 If fileName <> "" Then Workbooks.Open フォルダ名 & "\" & fileName End If