MSOfficeを使って作ったファイルを保存せずに終了してしまい、数時間分の作業をやり直すことになった人がいました。
使用しているソフト(PowerPoint)の自動保存は10分置きに保存する設定になっていましたが、特に異常終了したわけではなく、ウィンドウ右上の×ボタンで閉じて保存しますか?というダイアログにはいいえという選択肢をクリックした為に保存されているファイルも消えてしまいました。
このようなことを防ぐために(そもそも保存しろよってのはなしで)VBAやVBSで定期的に保存する仕組みを作ってPCを起動したらダブルクリックしてもらえればPC起動中はOffceのファイルを自動保存してくれるプログラムを作りたいです。
VBAで作ってみたものの、SLEEPで処理待ちをしていると保存できてもExcelが使用できなくなってしまいます。(反応なし)
定期的にバックアップ処理だけを動かしてそれ以外のタイミングはCPUをほぼ使わないというプログラムはできるでしょうか?
とりあえずExcel限定で。
autoSaveBooksを実行後、こいつを書いてあるBookを閉じないでおけば
エラーがない限りは、条件にあてはまるファイルは保存してくれるかと。
途中で保存処理をキャンセルしたい場合には、cancelAutoSaveを実行して下さい。
イミディエイトウィンドウに出力されるログ以外には、稼働状況を確認する方法はなさそう。
'保存間隔(分) Private Const INTERVAL_MINUTE As Long = 5 Private dtNext_ As Date Public Sub autoSaveBooks() Dim wb As Workbook Dim sFileName As String For Each wb In Workbooks If wb.Name <> ThisWorkbook.Name Then If wb.Path = "" Then '未保存なら、ダイアログを表示 sFileName = Application.GetSaveAsFilename(InitialFileName:=wb.Name & ".xlsx", FileFilter:="Excelファイル, *.xlsx", Title:=wb.Name & " を名前を付けて保存") If sFileName <> "False" Then Call wb.SaveAs(sFileName) Debug.Print "Save:" & Format$(Now, "hh:nn:ss") & "[" & wb.Path & "\" & sFileName & "]" Else Debug.Print "Skip:" & Format$(Now, "hh:nn:ss") & "[" & wb.Name & "]" End If ElseIf wb.ReadOnly Then '読み取り専用なら保存しない ElseIf wb.Saved Then '変更がなければ保存しない Else wb.Save Debug.Print "Save:" & Format$(Now, "hh:nn:ss") & "[" & wb.FullName & "]" End If End If Next wb dtNext_ = DateAdd("n", INTERVAL_MINUTE, Now) Debug.Print "Next:" & Format$(dtNext_, "hh:nn:ss") On Error GoTo ERR_CANNOT_SAVE Call Application.OnTime(EarliestTime:=dtNext_, Procedure:="autoSaveBooks", Schedule:=True) Exit Sub ERR_CANNOT_SAVE: Debug.Print Format$(Now, "hh:nn:ss") & ":[" & CStr(Err.Number) & "]" & Err.Description End Sub Public Sub cancelAutoSave() Call Application.OnTime(EarliestTime:=dtNext_, Procedure:="autoSaveBooks", Schedule:=False) Debug.Print "Auto Save Canceled." End Sub
以下、個人的な意見なので、かる~く読み流して、気に入らなかったら無視して下さい。
誰もが経験の有りそうなことですね。
自慢じゃないですが、私も何回もやったことあります。
こういった自動化は出来るけど、正直あまりおすすめできないと思ってます。
自動的に保存はされるけど、逆に言えば、
本人が意図しない保存をされる可能性も否定できないし、
そこまでコントロールしようとすると、どんどん深みにハマる事になりそうなので・・・
基本的には、作業者がこまめに保存する習慣をつけるべき事だと思います。
キーボードで、Ctrl + Sを押すだけで済むのですから。
補足
2018/09/19 22:31:56セルが編集中のBookがあると、そのセルの編集が終わるまで処理が止まって、待ち続けるようです。