Всем привет! У меня случился нереальный облом. Сохранил файл с изменениями которых быть не должно. Пол дня (хорошо хоть всего пол дня) работы на смарку. Давайте подумаем как можно сделать так чтобы такое предупредить в будущем. Такое уже не первый раз случается. Но бывало спасало автосохранение. Сейчас оно не помогло. Продумать такой случай который и произошел у меня. Я открыл файл. Сделал изменения. Нажал сохранить. Закрыл файл. Потом понял что произошло что-то не то. Файл надо было сохранить как! Разумеется никаких копий автосохранения не сохранилось. Прошёлся recuva - пусто. Искал в папке где лежит сам файл и в папке автосохранения Excel. В интернете пишут что если бы я перезаписал его или удалил - шансы бы были. А так ничего не поделаешь. Что-то подобное делается в автокаде. Там всегда есть копия - bak рядом с оригиналом. То есть предыдущая копия файла до нажатия кнопки сохранить. Плюс там очень хорошо продуманное автосохранение. Из темпа можно надёргать различные копии файла автосохранённые в разное время в течении дня. Excel 2013 русский у меня если что. Мне видится такое решение: Открывается файл. Сразу автоматом сохраняется как файл.bak - причём без какого-то участия пользователя. Если файл открывается повторно а уже файл.bak есть то пусть создается файл1.bak Ну либо как-то ещё. Может кто сталкивался с таким? Задача вроде не особо сложная. ДУмаю и сам бы справился. Но пока не понимаю как добавить такое событие (после открытия любого файла). Где должен макрос лежать?
Всем привет! У меня случился нереальный облом. Сохранил файл с изменениями которых быть не должно. Пол дня (хорошо хоть всего пол дня) работы на смарку. Давайте подумаем как можно сделать так чтобы такое предупредить в будущем. Такое уже не первый раз случается. Но бывало спасало автосохранение. Сейчас оно не помогло. Продумать такой случай который и произошел у меня. Я открыл файл. Сделал изменения. Нажал сохранить. Закрыл файл. Потом понял что произошло что-то не то. Файл надо было сохранить как! Разумеется никаких копий автосохранения не сохранилось. Прошёлся recuva - пусто. Искал в папке где лежит сам файл и в папке автосохранения Excel. В интернете пишут что если бы я перезаписал его или удалил - шансы бы были. А так ничего не поделаешь. Что-то подобное делается в автокаде. Там всегда есть копия - bak рядом с оригиналом. То есть предыдущая копия файла до нажатия кнопки сохранить. Плюс там очень хорошо продуманное автосохранение. Из темпа можно надёргать различные копии файла автосохранённые в разное время в течении дня. Excel 2013 русский у меня если что. Мне видится такое решение: Открывается файл. Сразу автоматом сохраняется как файл.bak - причём без какого-то участия пользователя. Если файл открывается повторно а уже файл.bak есть то пусть создается файл1.bak Ну либо как-то ещё. Может кто сталкивался с таким? Задача вроде не особо сложная. ДУмаю и сам бы справился. Но пока не понимаю как добавить такое событие (после открытия любого файла). Где должен макрос лежать?fairylive
Добрый день Создает резервную копию файла в папке "_Резерв" в том же каталоге где и запускается файл
В модуль "Эта книга" помещаете: [vba]
Код
Private Sub Workbook_Open() reserv End Sub
[/vba]
в модуль1 (или любой другой:
[vba]
Код
Sub reserv()
Dim strPath As String Dim strDate As String Application.ScreenUpdating = False strPath = ThisWorkbook.Path If Len(Dir(strPath & "\_Резерв\", vbDirectory)) = 0 Then MkDir strPath & "\_Резерв\" On Error Resume Next x = GetAttr(strPath) And 0 If Err = 0 Then strDate = Format(Now, "yyyy_mm_dd_hh-mm") FileNameXls = strPath & "\_Резерв\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5) & "_" & strDate & ".xlsb" ActiveWorkbook.SaveCopyAs Filename:=FileNameXls Else MsgBox "Ошибка сохранения!!!!", vbCritical End If Application.ScreenUpdating = True End Sub
[/vba]
Добрый день Создает резервную копию файла в папке "_Резерв" в том же каталоге где и запускается файл
В модуль "Эта книга" помещаете: [vba]
Код
Private Sub Workbook_Open() reserv End Sub
[/vba]
в модуль1 (или любой другой:
[vba]
Код
Sub reserv()
Dim strPath As String Dim strDate As String Application.ScreenUpdating = False strPath = ThisWorkbook.Path If Len(Dir(strPath & "\_Резерв\", vbDirectory)) = 0 Then MkDir strPath & "\_Резерв\" On Error Resume Next x = GetAttr(strPath) And 0 If Err = 0 Then strDate = Format(Now, "yyyy_mm_dd_hh-mm") FileNameXls = strPath & "\_Резерв\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5) & "_" & strDate & ".xlsb" ActiveWorkbook.SaveCopyAs Filename:=FileNameXls Else MsgBox "Ошибка сохранения!!!!", vbCritical End If Application.ScreenUpdating = True End Sub
Разумеется никаких копий автосохранения не сохранилось.
Посмотрите на всякий случай тут: c:\Users\ПОЛЬЗОВАТЕЛЬ\AppData\Local\Microsoft\Office\UnsavedFiles\ иногда сохраняются даже сохраненные файлы.
А вообще - лучший способ отката - всегда сохранять файлы как новые - с добавлением текущей даты и времени - потом легко можно откатится на нужный вариант(дату) лишнее - просто удаляете. Тут есть пример и описание Иногда файлы ловят неисправимые глюки(по разным причинам), и потом работавший долгое время файл может просто перестать открываться т.е. RIP.
Разумеется никаких копий автосохранения не сохранилось.
Посмотрите на всякий случай тут: c:\Users\ПОЛЬЗОВАТЕЛЬ\AppData\Local\Microsoft\Office\UnsavedFiles\ иногда сохраняются даже сохраненные файлы.
А вообще - лучший способ отката - всегда сохранять файлы как новые - с добавлением текущей даты и времени - потом легко можно откатится на нужный вариант(дату) лишнее - просто удаляете. Тут есть пример и описание Иногда файлы ловят неисправимые глюки(по разным причинам), и потом работавший долгое время файл может просто перестать открываться т.е. RIP. SLAVICK
fairylive, Добрый день. Создаете файл personal.xlsb - помещаете его в папку .....\AppData\Roaming\Microsoft\Excel\XLSTART\ В модуль сохраняете
[vba]
Код
Sub reserv()
Dim strPath As String Dim strDate As String Dim x Dim FileNameXls Application.ScreenUpdating = False strPath = ActiveWorkbook.Path If Len(Dir(strPath & "\_Резерв\", vbDirectory)) = 0 Then MkDir strPath & "\_Резерв\" On Error Resume Next x = GetAttr(strPath) And 0 If Err = 0 Then strDate = Format(Now, "yyyy_mm_dd_hh-mm") FileNameXls = strPath & "\_Резерв\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5) & "_" & strDate & ".xlsb" ActiveWorkbook.SaveCopyAs Filename:=FileNameXls Else MsgBox "Ошибка сохранения!!!!", vbCritical End If Application.ScreenUpdating = True End Sub
[/vba]
В модуль "Эта книга" файла с которым Вы работаете
[vba]
Код
Private Sub Workbook_Open() With ThisWorkbook Application.Run ("personal.xlsb!reserv") End With End Sub
[/vba] Автоматизация заключается в том, что при каждом открытии Вашего рабочего файла создается резервная копия файла. Только обратите внимание на расширение файла - у меня оно xlsb Также макрос reserv - можно повесить на кнопку и перед какой - то сложной операцией запускать
fairylive, Добрый день. Создаете файл personal.xlsb - помещаете его в папку .....\AppData\Roaming\Microsoft\Excel\XLSTART\ В модуль сохраняете
[vba]
Код
Sub reserv()
Dim strPath As String Dim strDate As String Dim x Dim FileNameXls Application.ScreenUpdating = False strPath = ActiveWorkbook.Path If Len(Dir(strPath & "\_Резерв\", vbDirectory)) = 0 Then MkDir strPath & "\_Резерв\" On Error Resume Next x = GetAttr(strPath) And 0 If Err = 0 Then strDate = Format(Now, "yyyy_mm_dd_hh-mm") FileNameXls = strPath & "\_Резерв\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5) & "_" & strDate & ".xlsb" ActiveWorkbook.SaveCopyAs Filename:=FileNameXls Else MsgBox "Ошибка сохранения!!!!", vbCritical End If Application.ScreenUpdating = True End Sub
[/vba]
В модуль "Эта книга" файла с которым Вы работаете
[vba]
Код
Private Sub Workbook_Open() With ThisWorkbook Application.Run ("personal.xlsb!reserv") End With End Sub
[/vba] Автоматизация заключается в том, что при каждом открытии Вашего рабочего файла создается резервная копия файла. Только обратите внимание на расширение файла - у меня оно xlsb Также макрос reserv - можно повесить на кнопку и перед какой - то сложной операцией запускатьberya
Автоматизация заключается в том, что при каждом открытии Вашего рабочего файла создается резервная копия файла.
Да спасибо, я именно так и думал. Но ваш вариант скорей подойдёт для людей которые что-то понимают в макросах и как минимум долго работают с одним и тем же файлом. Изо дня в день. У меня по сути объём работы такой что один файл может создаваться от 10 минут до 8 часов. Несколько дней - исключительная редкость. Но здесь тогда пользователи сами создают резервные копии.
Автоматизация заключается в том, что при каждом открытии Вашего рабочего файла создается резервная копия файла.
Да спасибо, я именно так и думал. Но ваш вариант скорей подойдёт для людей которые что-то понимают в макросах и как минимум долго работают с одним и тем же файлом. Изо дня в день. У меня по сути объём работы такой что один файл может создаваться от 10 минут до 8 часов. Несколько дней - исключительная редкость. Но здесь тогда пользователи сами создают резервные копии.fairylive
Private WithEvents app As Application Private Sub app_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean) On Error GoTo er Dim LastSaved$, Backup$ LastSaved = Wb.BuiltinDocumentProperties("Last Save Time") Backup = Wb.Path & "\" & Replace(LastSaved, ":", ".") & " " & Wb.Name If Wb Is Me Or Wb.IsAddin Then Exit Sub If Wb.FullName <> Wb.Name And Not SaveAsUI And MsgBox("Сделать бэкап?", 36) = 6 Then Shell Join(Array("cmd /c copy ", Wb.FullName, " ", Backup, " /y"), """") Do While Dir$(Backup) = "" DoEvents Loop ElseIf SaveAsUI Then MsgBox "Тут можно чего-то написать" End If er: End Sub Private Sub Workbook_Open() Set app = Application End Sub
[/vba] и перезапустить Excel
В PERSONAL.XSLB в модуль ЭтаКнига [vba]
Код
Private WithEvents app As Application Private Sub app_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean) On Error GoTo er Dim LastSaved$, Backup$ LastSaved = Wb.BuiltinDocumentProperties("Last Save Time") Backup = Wb.Path & "\" & Replace(LastSaved, ":", ".") & " " & Wb.Name If Wb Is Me Or Wb.IsAddin Then Exit Sub If Wb.FullName <> Wb.Name And Not SaveAsUI And MsgBox("Сделать бэкап?", 36) = 6 Then Shell Join(Array("cmd /c copy ", Wb.FullName, " ", Backup, " /y"), """") Do While Dir$(Backup) = "" DoEvents Loop ElseIf SaveAsUI Then MsgBox "Тут можно чего-то написать" End If er: End Sub Private Sub Workbook_Open() Set app = Application End Sub
Ещё при сохранении КАК выскакивает "Тут можно чего-то написать". Так и должно быть?
И пожалуй стоит сохранять эти бэкапы в отдельную папку в той же папке где находится исходник (Или может вообще в какую-то общую папку, например на сервере с рэйдмассивом, чтобы повысить шансы выживания файлов). А то слишком много копий появляется в текущей папке, если поставить это дело на автомат (имею ввиду если убрать всплывающее окно с вопросом Сделать бэкап).
krosav4ig, спасибо, походу дела то что надо!
Не совсем понятно как работает. Можете пояснить немного код? Вот эта строчка должна заменять текущий бэкап или нет?
Ещё при сохранении КАК выскакивает "Тут можно чего-то написать". Так и должно быть?
И пожалуй стоит сохранять эти бэкапы в отдельную папку в той же папке где находится исходник (Или может вообще в какую-то общую папку, например на сервере с рэйдмассивом, чтобы повысить шансы выживания файлов). А то слишком много копий появляется в текущей папке, если поставить это дело на автомат (имею ввиду если убрать всплывающее окно с вопросом Сделать бэкап).fairylive
Сообщение отредактировал fairylive - Пятница, 15.12.2017, 12:28
Вот подправил - работает как я и хотел. Создаются бэкапы Excel в отдельную папку в той же папке где исходник. [vba]
Код
Private WithEvents app As Application Private Sub app_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean) On Error GoTo er Dim LastSaved$, Backup$ LastSaved = Wb.BuiltinDocumentProperties("Last Save Time") If Dir(Wb.Path & "\excel_bak\", vbDirectory) = "" Then MkDir (Wb.Path & "\excel_bak\") Backup = Wb.Path & "\excel_bak\" & Replace(LastSaved, ":", ".") & " " & Wb.Name If Wb Is Me Or Wb.IsAddin Then Exit Sub If Wb.FullName <> Wb.Name And Not SaveAsUI Then 'And MsgBox("Сделать бэкап?", 36) = 6 Then Shell Join(Array("cmd /c copy ", Wb.FullName, " ", Backup, " /y"), """") Do While Dir$(Backup) = "" DoEvents Loop ElseIf SaveAsUI Then 'MsgBox "Тут можно чего-то написать" End If er: End Sub Private Sub Workbook_Open() Set app = Application End Sub
[/vba]
Вот подправил - работает как я и хотел. Создаются бэкапы Excel в отдельную папку в той же папке где исходник. [vba]
Код
Private WithEvents app As Application Private Sub app_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean) On Error GoTo er Dim LastSaved$, Backup$ LastSaved = Wb.BuiltinDocumentProperties("Last Save Time") If Dir(Wb.Path & "\excel_bak\", vbDirectory) = "" Then MkDir (Wb.Path & "\excel_bak\") Backup = Wb.Path & "\excel_bak\" & Replace(LastSaved, ":", ".") & " " & Wb.Name If Wb Is Me Or Wb.IsAddin Then Exit Sub If Wb.FullName <> Wb.Name And Not SaveAsUI Then 'And MsgBox("Сделать бэкап?", 36) = 6 Then Shell Join(Array("cmd /c copy ", Wb.FullName, " ", Backup, " /y"), """") Do While Dir$(Backup) = "" DoEvents Loop ElseIf SaveAsUI Then 'MsgBox "Тут можно чего-то написать" End If er: End Sub Private Sub Workbook_Open() Set app = Application End Sub
Всплыл БАГ. При работе с сетевыми файлами. В связи с отсутствием админских прав. Появляется ошибка что нет прав если попытаться сохранить. Плюс в чужих папках появляется папка excel_bak даже если выбором было сохранить как.
Так же при работе с сетевыми файлами появляются тормоза при закрытии файла. Причём даже если просто зайти ничего не сделать (просто посмотреть) и выйти.
UPD. Тормоза не связаны с макросом или файлом personal.xlsb - удалял его и ничего не менялось. При этом файлы xlsx работают нормально. xls при выходе подвисают секунд на 10. Возможно связано с последним декабрьским обновлением винды. В инете чувак один писал на англоязычном форуме что у него файлы офиса накрылись. Но я сейчас откатил это обновление и тормоза не пропали.
Всплыл БАГ. При работе с сетевыми файлами. В связи с отсутствием админских прав. Появляется ошибка что нет прав если попытаться сохранить. Плюс в чужих папках появляется папка excel_bak даже если выбором было сохранить как.
Так же при работе с сетевыми файлами появляются тормоза при закрытии файла. Причём даже если просто зайти ничего не сделать (просто посмотреть) и выйти.
UPD. Тормоза не связаны с макросом или файлом personal.xlsb - удалял его и ничего не менялось. При этом файлы xlsx работают нормально. xls при выходе подвисают секунд на 10. Возможно связано с последним декабрьским обновлением винды. В инете чувак один писал на англоязычном форуме что у него файлы офиса накрылись. Но я сейчас откатил это обновление и тормоза не пропали.fairylive
Сообщение отредактировал fairylive - Пятница, 15.12.2017, 17:35