プロが教えるわが家の防犯対策術!

エクセル保存終了で一時ファイルが残ってしまう。
職場でExcel2003+VBAを利用しています。(自宅ではExcel2002+VBAです)
不特定多数の人が利用している職場で、保存終了後に、拡張子なし英数字名の一時ファイルが残ってしまう場合があります。
理由はファイルが1M以上あり、保存に時間がかかります。砂時計表示中に再度、終了操作をしてしまい、重複して終了処理させてしまう為と思われます。
重複終了操作対策は色々試みています。
(対策案は以前、この場で質問させて頂いています)

消えずに残ってしまった一時ファイルは、私が手作業で削除しています。
VBA等で自動削除する方法はありましたら教えて頂きたくお願いします。

A 回答 (2件)

>..保存に時間がかかります。

砂時計表示中に再度、終了操作をしてしまい、
>重複して終了処理させてしまう..
この認識には少し疑問があります。保存処理中にはユーザー操作は受け付けてくれないはず。

それに、一時ファイルではありますが、実際に変更が反映されているのはこのファイルです。
『Excel のファイル保存方法について』
http://support.microsoft.com/kb/814068/ja
その一時ファイルが残る状況の時、何かエラーメッセージが出てないのでしょうか。
発生直後に居合わせる事ができたら、
元ファイルに変更が反映しているか確認してみたほうが良いと思います。
#古いファイルは削除してしまって構わないとは思いますが。

参考。
『ネットワーク ドライブにファイルを保存する際に "変更を保存できませんでした" というエラー メッセージが表示される』
http://support.microsoft.com/kb/813973/ja
削除権限が無いユーザーの利用時に発生しているのかもしれません。
もしくはウイルス対策ソフトの影響だったり。
    • good
    • 0
この回答へのお礼

回答を頂いた日にお礼のご返事をしましたが、どうも登録ミスがあった様なので再投稿します。

色々貴重な情報をありがとうございます。

>..保存に時間がかかります。砂時計表示中に再度、終了操作をしてしまい、
>重複して終了処理させてしまう..
↓の様になります。
(1)終了保存操作(Xボタン押す、保存Yes)すると、砂時計が表示されます。
 この間は、当然ながらマウス入力は効きません。
 保存で10秒以上かかります。
(2)この砂時計表示の時には、カレントフォルダに一時ファイルが生成されます。
(3)砂時計が消えた直後に、再度、終了のXボタン操作すると、
 砂時計が再表示されて、「この要求は受け付けられませんでした」のメッセージが
 表示されます。(一瞬、VBAで作成したフォーム部分が真っ白になります)
(4)砂時計は消えますが、一時ファイルが残ったままになります。
(5)「エラーを送信しますか」のメッセージが表示されます。

>削除権限が無いユーザーの利用時に発生しているのかもしれません。
>もしくはウイルス対策ソフトの影響だったり。

職場PCに業務用として、このVBA付きエクセルシートを入れたのが8年程前です。
職場PCにウィルスバスタが導入されたのが、5年程前。(自宅PCも同様)
バスター導入後かとも感じています。

職場及び自宅PCの主メモリは256MBです。
ウィルスバスタ2009を自宅で導入する時に、「メモリが足りません。続けますか」みたいなメッセージはありました。

他に、VBAでセルデータのシートコピーすると、一部コピーが出来ない事があります。(現象は一定)
これはコピーの順番を変えると出来たりする場合があります。

メモリが足りないのも原因の一つでしょうね。

とりあえずステタスバーに保存中メッセージを表示させて、この間のマウス操作をしない様にと喚起しようかと思っています。

お礼日時:2010/09/25 09:34

>拡張子なし英数字名の一時ファイルの有るフォルダはどうなんでしょうね?


フォルダ名は一定で、かつ、フォルダの中のファイルは全て削除しても問題ないなら
Kill ステートメントはワイルドカードが使えますので kill \\server\are\*.* で消せないかな?

拡張子が無いファイルを全て消してよいなら、getextensionnameは拡張子が分からなければ
""(長さ0の文字列が返される)のでこれを元にKillしてみては?
Sub test()
  Const trgDir = "C:\"  '適宜変更を
  Dim trgFile As String
  Dim objFS As Object
  
  Set objFS = CreateObject("Scripting.FileSystemObject")
  trgFile = Dir(trgDir, vbNormal)

  Do While trgFile <> ""
    Debug.Print trgFile & "→" & objFS.getextensionname(trgFile)
    trgFile = Dir
  Loop

End Sub
ファイルが使用中の場合には当然エラーが発生しますので、On Error ステートメントで調整してください。
これを適当なイベントから呼び出せばよろしいかと。
末尾ながら、一時ファイルを消して対処するのは『臭い物にフタ』のようで・・・。
一時ファイルが出来ない仕組みが出来るといいですね。
追伸
サーバー上のファイルは通常の場合、消すと元に戻せませんのでバックアップは取ってから。
もしくは適当な試験フォルダ・ファイルを作ってからにしてください。
    • good
    • 0
この回答へのお礼

早速のご返事ありがとうございます。
そうですね。他に妙案がない時は、getextensionnameで拡張子がないファイルを探す方法を参考にさせて頂きたく思います。

この回答を読んだ後に、ふっと思ったのですが、
プログラムファイル(.xls)格納フォルダーに一時ファイルが生成されるのがネックですね。
ツール(T)→オプション(O)→全般に、カレントフォルダ名(D)がありますが、ここは参照されていませんね。
起動フォルダに一時ファイルが作られる様ですね。
一時ファイルが、指定した作業ファイルに作られる様に設定出来れば、少しは気が楽になるのですが、模索しています。

お礼日時:2010/09/14 09:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています