Здесь начало этой темы. Так как изначальный вопрос в ней закрыт, поэтому создал новую тему для продолжения доработки кода макроса. Суть в том чтобы макрос создавал файлы резервных копий в папке исходного файла, но при каждом сохранении добавлял в имени часы и минуты. Иногда хочется работать с каким то файлом в течении дня, машинально сохранять его копии не думая о них и в конце отобрать из полученных копий самый удачный вариант или несколько, а остальные удалить. При таком алгоритме при любом сбое Windows или из за утомления самого человека всегда будет в наличии несколько резервных копий документа со временем их создания и удачными вариантами, а труд не будет потерян.
Итак как должно все работать: 1 Если файл создан первый раз он сохраняется со своим именем 2 При втором сохранении к имени добавляется дата 3 При последующих сохранениях к дате добавляются часы и минуты сохранения
Код макроса по теме внизу под спойлером:
[vba]
Код
Private Sub Сохранить_с_датой () ' Сохранить файл с датой и временем в имени Dim Wb As Document Dim WbName As String Dim iPath As String Dim iFileName As String Dim iFileNameTime As String Set Wb = ActiveDocument WbName = Wb.Name '1. Проверка, что активный файл сохранён на жёстком диске. ' Иначе не известно, по какому пути сохранять. If ActiveDocument.path = "" Then MsgBox "Активный файл не сохранён на жёстком диске." & Chr(10) & "" & Chr(10) & "Перед сохранением копии сохраните оригинал", vbExclamation Exit Sub '2 Путь к сохраненному документу iPath = ActiveDocument.path & "\" '3 Проверякм существования такого же файла если файл существует добавляем время If Dir(iPath + iFileName) <> "" Then GoTo iFileName: iFileNameTime = Left(WbName, Len(WbName) - 5) + "_" + Format(Date, "yy-mm-dd") + " " + Format(Time, "HH-mm") + ".docx" Wb.SaveAs (iPath + iFileNameTime) End If GoTo MyDocTitle '4. Сохраняем файл с датой сегодняшнего дня iFileName: iFileName = Left(WbName, Len(WbName) - 5) + "_" + Format(Date, "yy-mm-dd") + ".docx" Wb.SaveAs (iPath + iFileName) ' 5. Прописываем в свойствах файла дату и время сохраненки MyDocTitle: ' Call MyDocTitle End Sub
[/vba]
Всем доброго времени суток.
Здесь начало этой темы. Так как изначальный вопрос в ней закрыт, поэтому создал новую тему для продолжения доработки кода макроса. Суть в том чтобы макрос создавал файлы резервных копий в папке исходного файла, но при каждом сохранении добавлял в имени часы и минуты. Иногда хочется работать с каким то файлом в течении дня, машинально сохранять его копии не думая о них и в конце отобрать из полученных копий самый удачный вариант или несколько, а остальные удалить. При таком алгоритме при любом сбое Windows или из за утомления самого человека всегда будет в наличии несколько резервных копий документа со временем их создания и удачными вариантами, а труд не будет потерян.
Итак как должно все работать: 1 Если файл создан первый раз он сохраняется со своим именем 2 При втором сохранении к имени добавляется дата 3 При последующих сохранениях к дате добавляются часы и минуты сохранения
Код макроса по теме внизу под спойлером:
[vba]
Код
Private Sub Сохранить_с_датой () ' Сохранить файл с датой и временем в имени Dim Wb As Document Dim WbName As String Dim iPath As String Dim iFileName As String Dim iFileNameTime As String Set Wb = ActiveDocument WbName = Wb.Name '1. Проверка, что активный файл сохранён на жёстком диске. ' Иначе не известно, по какому пути сохранять. If ActiveDocument.path = "" Then MsgBox "Активный файл не сохранён на жёстком диске." & Chr(10) & "" & Chr(10) & "Перед сохранением копии сохраните оригинал", vbExclamation Exit Sub '2 Путь к сохраненному документу iPath = ActiveDocument.path & "\" '3 Проверякм существования такого же файла если файл существует добавляем время If Dir(iPath + iFileName) <> "" Then GoTo iFileName: iFileNameTime = Left(WbName, Len(WbName) - 5) + "_" + Format(Date, "yy-mm-dd") + " " + Format(Time, "HH-mm") + ".docx" Wb.SaveAs (iPath + iFileNameTime) End If GoTo MyDocTitle '4. Сохраняем файл с датой сегодняшнего дня iFileName: iFileName = Left(WbName, Len(WbName) - 5) + "_" + Format(Date, "yy-mm-dd") + ".docx" Wb.SaveAs (iPath + iFileName) ' 5. Прописываем в свойствах файла дату и время сохраненки MyDocTitle: ' Call MyDocTitle End Sub
Sub tt() Dim Wb As Document Set Wb = ActiveDocument wbn = Wb.Name If Wb.Path = "" Then MsgBox "Активный файл не сохранён на жёстком диске." & Chr(10) & "" & Chr(10) & "Перед сохранением копии сохраните оригинал", vbExclamation Exit Sub End If put_ = Wb.Path & "\" dat_ = Format(Date, "yy-mm-dd") vrem_ = Format(Time, "hh-mm") fn0_ = Left(wbn, Len(wbn) - 5) 'имя файла без расширения If InStr(fn0_, dat_) Then 'если в имени есть сегодняшняя дата If Right(fn0_, 8) = dat_ Then 'если дата есть и она последняя (нет времени) fn_ = fn0_ & " " & vrem_ Else fn_ = Left(fn0_, Len(fn0_) - 6) & " " & vrem_ End If Else fn_ = fn0_ & "_" & dat_ End If Wb.SaveAs (put_ & fn_ & ".docm") End Sub
[/vba]
Так нужно? [vba]
Код
Sub tt() Dim Wb As Document Set Wb = ActiveDocument wbn = Wb.Name If Wb.Path = "" Then MsgBox "Активный файл не сохранён на жёстком диске." & Chr(10) & "" & Chr(10) & "Перед сохранением копии сохраните оригинал", vbExclamation Exit Sub End If put_ = Wb.Path & "\" dat_ = Format(Date, "yy-mm-dd") vrem_ = Format(Time, "hh-mm") fn0_ = Left(wbn, Len(wbn) - 5) 'имя файла без расширения If InStr(fn0_, dat_) Then 'если в имени есть сегодняшняя дата If Right(fn0_, 8) = dat_ Then 'если дата есть и она последняя (нет времени) fn_ = fn0_ & " " & vrem_ Else fn_ = Left(fn0_, Len(fn0_) - 6) & " " & vrem_ End If Else fn_ = fn0_ & "_" & dat_ End If Wb.SaveAs (put_ & fn_ & ".docm") End Sub