質問者
Workbooks.Openでファイルが削除されます

質問
-
VBAでsamba(3.0.33)上のフォルダを開くと、エラーが発生しなぜか配下のファイルが削除されます。
削除される理由がなんなのかが知りたいです。excelの問題なのか、sambaの問題なのか、相性の問題なのか。
sambaのバグフィックスをななめよみしましたが該当するものが見つけられませんでした。
発生条件
・Excel2007,2010で実行
#2003だと発生しない
・samba上のフォルダ
#ローカル環境だと発生しない
・Workbooks.Openに、\(エンサイン)で終わるフォルダ名を指定
#最後が、\(エンサイン)でなければ発生しない
現象
下記の、inputFileNameにフォルダ名を指定すると、エラーが発生し、
例外に飛んだ時に配下のファイルが削除される。
Workbooks.Open
Filename:=inputFileName, Password:=wk_pass,
ReadOnly:=True,
UpdateLinks:=0, IgnoreReadOnlyRecommended:=True
よろしくお願いします。
すべての返信
-
返信ありがとうございます。
>>削除される理由がなんなのかが知りたいです
>実務上の回避方法ではなく、趣味又は知的好奇心から原因究明したいのでしょうか?回避方法については、発生状況がわかっているので複数の回避策がとれます。
処理速度面から、最後がエンサインだった場合、OPENにいかずにエラーとします。
知的好奇心というより、同じ現象にあった人が既にいるかを期待しました。
>>sambaのバグフィックスをななめよみしましたが該当するものが見つけられませんでした。
>原因究明したいのに何故 ななめよみ?回避策がわかっている事とsambaのバージョンが古く量が多いためです。
又、2003で発生しない事から、Excelのバグが濃厚だと想定しています。
>何故エラーの詳細を秘密にするのでしょうか?
>エラーこそが最大の手掛かりです。
秘密にしたつもりはありません。
普通にファイルがないとのエラーが出るだけです。
3.マイクロソフトのサポート担当者に問い合わせるに進みます。
-
>処理速度面から、最後がエンサインだった場合、OPENにいかずにエラーとします。
目的のファイルが存在しないなどは、普通にあり得ることです。
ファイルを開く前には、ファイルの存在を確認するのが大原則です。
その原則さえ守れば、最後がエンサインかどうかは考慮する必要がないでしょう。
最後がエンサインでは無くてもファイルの存在確認を省略することで、別のトラブルに見舞われるかもしれません。
また他の言語でなら手抜きをして例外処理にしてしまう人でも(←私もたまにやりますごめんなさい)
VBAでは例外処理が書きにくいので、手抜きどころか反って手間取るように思えます。
よって同じようなトラブルに遭遇する確率は極めて低いと予想します。
ちなみにファイルの存在確認をするには、
VBAなら FileSystemObject の FileExistsメソッド が則していると思います。
VBAには Dir関数 も有りますが、ネットワークが考慮される前の古い関数なので不安があります。