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

開いている別のファイルにExcelのマクロで上書きしたい

いつも申し訳ありませんが
またExcelのマクロについて質問させてください。

名前 = ActiveWorkbook.Name
Set ファイル = Application.FileDialog(msoFileDialogSaveAs)
Application.FileDialog(msoFileDialogSaveAs).InitialFileName = "コピー" & 名前
If ファイル.Show = -1 Then
Worksheets.Copy
ActiveWorkbook.SaveAs "コピー" & 名前
End If
Set ファイル = Nothing

これにより、現在開いているファイルを
マクロを付けない状態で
名前の前に「コピー」と付けた別のファイルとして保存しています。
ただ問題は
同じ「コピー」が付いたファイルがすでに開かれている場合
保存しようとしても

実行時エラー '1004':
このブックを、ほかの開いているブックまたはアドインと同じ名前では
保存できません。別の名前を指定するか、または保存する前に開いている
ブックまたはアドインを閉じてくさい。

というエラーが表示されてしまうのです。
Excel2002でもExcel2003でも同じでした。

これを
仮に「コピー」の付いているファイルが
すでに開かれているとしても
これに上書きする形で保存できるようにするためには
どうすればよいのでしょうか。

ご回答をよろしくお願いいたします。

A 回答 (1件)

ファイルが開かれているか否かは、OS が担当しています。


開かれているファイルを上書き保存しようとした場合
OSから警告されてExcelは作業を中止します。
(OSの方が エライ のです)
なので自身のExcelで開いている場合には
Dim bk As Workbook
For Each bk In Workbooks
Debug.Print bk.Name
If bk.Name = "コピー" & 名前 & ".xls" Then
bk.Close
End If

Next
のように開いているブック名を取得して、閉じてから、Save の流れになるかと。
あるいは
On Error Goto errArere
等のようにエラー処理ルーチンに飛ばして
"コピー"をエラーが出なくなるまで(保存できるまで)
コピー1
コピー2
・・・
と変えて試みるとか。

もし共有フォルダで誰かが開いていている場合には
グッとハードルが上がってプログラム上では如何ともし難く
運用面での対処が必要の場合もあります。
『誰よ、○▽□を開いているのは!!』と会社中に響き渡る大声で・・
半分は冗談では有りません。

共有ファイルを現在使用しているユーザーを特定する方法
http://www.atmarkit.co.jp/fwin2k/win2ktips/083op …
    • good
    • 0
この回答へのお礼

回答、ありがとうございました。
おかげさまでうまくいきました。
実は勘違いしておりまして
bk.Close
のところを
ActiveWorkbook.Close
としていたのです。
ほんとうに助かりました。
また何かありましたら、よろしくお願いいたします。
今回の質問の件も職場で起こったことですし
共有フォルダについても勉強させていただきますね。

お礼日時:2010/10/23 13:26

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