Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' constants
Const ksSep = " - "
Const ksFormat = "ddmmmyy"
Const ksDot = "."
Const ksPattern = ksSep & "##???##"
' declarations
Dim sNameExt As String, sName As String, sExt As String, sDate As String
Dim sSep As String, sSepDate As String
Dim I As Integer
' start
Application.EnableEvents = False
sNameExt = ThisWorkbook.Name
' process
I = InStr(StrReverse(sNameExt), ksDot)
sName = Left(sNameExt, Len(sNameExt) - I)
sExt = Right(sNameExt, I)
sDate = Right(sName, Len(ksFormat))
sSep = Right(Left(sName, Len(sName) - Len(sDate)), Len(ksSep))
sSepDate = Right(sName, Len(ksSep) + Len(sDate))
If sSepDate Like ksPattern Then sName = Left(sName, Len(sName) - Len(sSep) - Len(sDate))
sName = sName & ksSep & Format(Now(), ksFormat)
sNameExt = sName & sExt
ThisWorkbook.SaveAs sNameExt
' end
Cancel = True
Application.EnableEvents = True
End Sub