- ベストアンサー
Excel VBAでのSaveCopyAsの挙動
- Excel VBAのSaveCopyAsを使用して、変更がある場合にバックアップファイルを作成する方法についてのヒントをお求めです。
- 保存せずにExcelを閉じる場合でも、SaveCopyAsを通してバックアップファイルを作成できない問題が発生しています。
- ThisWorkbookオブジェクトを使用して、Workbook_beforeCloseおよびWorkbook_BeforeSaveイベントを処理することで、バックアップファイルを作成することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> いただいたアドバイスを反映させてみましたが、 > やはりバックアップは作成されませんでした。。。 そうですか…こちら2013では以下のようにして保存されています。 ただ、他のエクセルファイルが開いていて該当ファイルを終了した場合、たまに「変更があるので保存しますか」というダイアログが出て保存されない事がありました。該当フィルだけの場合は保存されています。 Private Sub Workbook_BeforeClose(Cancel As Boolean) If ThisWorkbook.Saved = False Then Application.EnableEvents = False ThisWorkbook.Save ThisWorkbook.SaveCopyAs "バックアップファイルのフルパス" Application.EnableEvents = False End If End Sub
その他の回答 (1)
- kkkkkm
- ベストアンサー率66% (1734/2604)
たしかにSaveCopyAsを通りますが実行されませんね…。 ただ、BeforeSaveの中でSaveした時にBeforeSaveイベントが起こらないようにしているとしたら、その部分で直接保存するときとSaveで呼ばれたときとで何か違いがあるのかもしれませんね。 とりあえず以下の方法で Workbook_beforeCloseの方で Application.EnableEvents = False ThisWorkBook.Save ThisWorkbook.SaveCopyAs "バックアップファイルフルパス" Application.EnableEvents = True として逃げておくというのはいかがでしょう。
お礼
早速ご回答ありがとうございます。 再現性があるようなので、ちょっとホッとしました。 いただいたアドバイスを反映させてみましたが、 やはりバックアップは作成されませんでした。。。 こういう仕様だとするとちょっと困ってしまいます。 引き続き、アイディアをお待ちしております。 ありがとうございます。
お礼
ありがとうございます! バックアップファイルができていないと申し上げましたが、リモート環境のせいかバックアップファイルができるのが(とてつもなく)遅かったようです。別の作業をしていてふと気が付いたらバックアップファイルができていました! カラクリが今一つわからないのですが、ご教示いただいた方法でいってみます。 本当にありがとうございました!!