Заставляем эксель делать резервные копии файлов с помощью макроса и учимся как сохранить макрос в Личной книге макросов
На рабочем компьютере с десятым офисом столкнулся с интересной и нестандартной проблемой - по непонятным причинам, эксель через раз спрашивает сохранить файл при выходе или нет. Конечно же, ручное нажатие «дискеты» или выполнение процедуры «сохранить как» решает проблему с сохранением файла, но привычка это сила, с которой сразу справиться не так уж просто, поэтому представьте разочарование, когда час или два работы улетают впустую после выхода из файла без сохранения.
Есть советы на счет того, где искать резервные копии файлов, которые формируются через автосохранение заложенное в настройках экселя, но в моем случае это оказалось бесполезным, т.к. файлов просто не было. Залез на форумы, облазил все настройки и параметры сохранения, все советы оказались недейственными или неактуальными, а в настройках было все в порядке. В итоге пришел к выводу, что это возможно какой-то баг нестыковки после переустановки – первоначально был установлен седьмой офис, его удалили и поставили десятый. Самый очевидный вариант – повторная переустановка Microsoft Office.
Но мне стало интересно, есть ли возможность прикрутить какой-то «костыль» к экселю, чтобы заставить его сохранять резервную копию файлов в фоновом режиме, оказалось можно – нашел макрос, которые немного переписал:
Public Sub Auto_Close()
'запускает макрос Backup_Active_Workbook при выходе из файла
Call Backup_Active_Workbook
End Sub
Sub Backup_Active_Workbook()
'v1.1
'теперь учитывает формат файла исходника
Dim x As String
strPath = "c:\BackUps" 'папка дл¤ сохранени¤ резервной копии
On Error Resume Next
x = GetAttr(strPath) And 0
'определяем имя и обрезаем в этом имение формат файла
strFileFull = ActiveWorkbook.Name
strFile = Mid(strFileFull, 1, InStrRev(strFileFull, ".xl") - 1)
'опять определяем имя файла и вырезаем из него только формат файла
strFileFull = ActiveWorkbook.Name
FileFormatMe = Mid(strFileFull, InStrRev(strFileFull, ".xl"))
endMe = Mid(FileFormatMe, 2)
If Err = 0 Then ' если путь существует - сохраняем копию книги, добавляя дату-время
strDate = Format(Now, "dd-mm-yy hh-mm")
FileNameXls = strPath & "\" & strFile & " " & strDate & FileFormatMe
ActiveWorkbook.SaveCopyAs FileName:=FileNameXls
Else 'если путь не существует - выводим сообщение, такая же ошибка бужет в случае закрытия чистой книги
MsgBox "папка " & strPath & " недоступна или не существует!", vbCritical
End If
End Sub
При выходе из файла в фоновом режиме, выполняется сохранение его копии в папке BackUps на диске C с фиксированием даты и времени в имени файла, таким образом, Вы всегда сможете найти резервную копию всех когда-либо закрытых файлов
PS Макрос нужно сохранять не в рабочей книге, а в «Персональной книге макросов», проще всего это сделать так:
Запись макроса / указываем имя макроса и выбираем место сохранения - Сохранить в: Личная книга макросов / выполнить любое действие в экселе, например, поставить единичку в ячейке A1 / прекратить запись макроса
затем
Вкладка Вид (или Разработчик) / Макросы / ищем среди списка макрос с тем именем, с которым ранее записали, выделяем его и справа жмем кнопку «Войти» /
открывается окно VB
На панели инструментов вверху ищем вкладку Run / выбираем из списка Reset / ниже в окне с текстовым редактором VB вставляем макрос с этой статьи / жмем дискетку и выходим.