とりあえず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を押すだけで済むのですから。