2017-11-22 56 views
1

ファイルを保存する前に、ファイルのバックアップを作成するようにExcelにプログラムする必要があります。SaveAs BeforeSave(Excel、VBA)

ただし、使用するたびにExcelがクラッシュします。

無限ループを防ぐためにApplication.EnableEvents = Falseを挿入しても、なぜこのようなことが起こるのか説明できますか?

私が使用していたコードは以下の通りです:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    Application.EnableEvents = False 
    ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & "BackUp_" & Date & "_" & ActiveWorkbook.Name, FileFormat:=52 
    Application.EnableEvents = True 
End Sub 

が助けを事前にありがとうございます!

+2

「日付」にファイル名に含めることができない特殊文字が含まれているかどうかはわかりません。 –

+1

あなたは '' FileFormat:= 52'の前に小さなカンマ '、'がありませんか? –

+0

@ David - 日付で問題は発生しません。 ExcelがなくてもExcelがクラッシュします。 –

答えて

0

編集:理由を見つけました。 SaveAsは、保存せずに元のブックを閉じ、新しいブックを自動的に開きます。したがって、Excelは原点保存スクリプトを実行できません。

代わりに、SaveCopyAsを使用すると、バックグラウンドでコピーが作成される可能性があります。そのため、オリジナルファイルはあなたのウィンドウにまだ残っています。

これを試してみてください:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    ActiveWorkbook.SaveCopyAs Filename:=ActiveWorkbook.Path & "\" & "BackUp_" & Format(Date, "YYYYMMDD") & "_" & ActiveWorkbook.Name 
End Sub 

注:直接Dateを呼び出すと、エラーを防ぐことができFormat機能を使用して、無効な文字が、ある、/が含まれてい2017/11/22ようである可能性があります。

+0

ありがとうございました! 私はあなたのソリューションを使用すると思います) –

関連する問題