Создание резервных копий ценных файлов
При работе с некоторыми особо ценными файлами, бывает необходимо периодически в течение рабочего дня сохранять его промежуточные версии, чтобы, при необходимости, иметь возможность к ним вернуться. Выполнять постоянно вручную команды "Файл - Сохранить как" утомительно, да и случайно можно вместо "Сохранить как" нажать на "Сохранить", похоронив этим большой кусок работы.
Если у вас Excel 2010, то кроме стандартного автосохранения у вас должна работать система версий - каждый раз при автосохранении Excel делает отдельную копию вашего текущего файла и (даже!) при выходе из программы и отрицательном ответе на вопрос "Сохранить изменения в файле?" все равно сохраняет временную копию. Добраться до этих временных копий можно через вкладку Файл - Сведения - Версии (File - Properties - Versions):
Для своих проектов я в итоге пришел к другому решению - написал макрос, который сохраняет текущую книгу в заданную папку, добавляя к имени книги текущую дату и время в формате ДД-ММ-ГГ ЧЧ-ММ (например Мой проект 12-10-12 07-35). Периодически запуская этот макрос на ключевых этапах работы с файлом, я получаю список из энного количества файлов-версий рабочей книги и, соответственно, легко могу откатиться к нужному варианту в прошлом.
Откройте редактор Visual Basic, выбрав на вкладке Разработчик - Редактор Visual Basic (Developer - Visual Basic Editor) или нажав ALT+F11. Вставьте через меню Insert - Module новый пустой модуль и скопируйте туда текст этого макроса:
Sub Backup_Active_Workbook() Dim x As String strPath = "c:\TEMP" 'папка для сохранения резервной копии On Error Resume Next x = GetAttr(strPath) And 0 If Err = 0 Then ' если путь существует - сохраняем копию книги, добавляя дату-время strDate = Format(Now, "dd-mm-yy hh-mm") FileNameXls = strPath & "\" & "Мой проект" & " " & strDate & ".xls" 'или xlsm ActiveWorkbook.SaveCopyAs Filename:=FileNameXls Else 'если путь не существует - выводим сообщение MsgBox "Папка " & strPath & " недоступна или не существует!", vbCritical End If End Sub
Естественно, путь к папке (C:\TEMP) и имя файла (Мой проект) надо заменить на свои.
Если ваша папка для сохранения находится на сетевом диске, то ее адрес можно прописать, используя IP-адрес сервера, например:
strPath = "\\192.168.1.1\Папка для бэкапов"
Еще одно, возможно, полезное дополнение в том, что имя файла может быть не постоянным, а браться из заданной ячейки листа, где его либо вводит пользователь, либо оно автоматически формируется формулами (например, функцией СЦЕПИТЬ и т.д.). Тогда необходимо будет чуть подправить следующую строку:
FileNameXls = strPath & "\" & Sheets("Лист1").Range("A1").Value & " " & strDate & ".xls"
Предполагается, что имя файла берется с листа Лист1 из ячейки А1.
Ссылки по теме
- Автоматический бэкап в заданную папку с помощью надстройки PLEX
- Что такое макросы, куда вставлять код макроса на VBA, как их использовать?
Могли бы, пожалуйста, подсказать, как необходимо скорректировать макрос таким образом, чтобы сохранение происходило автоматически с возможностью задания интервала сохраненения.
Спасибо!
За это огроменная благодарность создателю сайта и модерам.
Спасибо за макрос. Повесил на Auto_open() и пользуюсь не первый месяц - уже не раз макрос спасал от потери данных.
Но недавно обратил внимание, что если документ уже открыт другим пользователем (файл на сервере), то Backup делается во всякие разные папки (логику выбора папок пока не понял) и приходится раз в неделю пользоваться поиском и удалять не нужные. Можно как-то это обойти, чтобы если файл уже открыт, то макрос бы не запускался?
FileNameXlsm = strPath & "\" & "Автосохранение" & " " & strDate & ".xlsm"
ActiveWorkbook.SaveCopyAs Filename:=FileNameXlsm
в трех местах (выделил красным цветом).
2. Для пробы создал папку тоже на диске С и назвал Автосохранение (как и сам файл).
strPath = "C:\Автосохранение"
3. Не сохраняет. Пробовал удалить папку - нет сообщения "недоступна или не существует!".
Скажите, пожалуйста, где я не прав. Хочется, чтобы код работал.
С наступающим Новым годом!
Если будет возможность, можете прокомментировать вопрос от
Просто у меня аналогичная проблема
Заранее большое спасибо!
В любом случая спасибо!
Вопрос возник по данному макросу. Прошу помощи. Хотел бы сохранить не одну копию рабочего файла ,а размножить его. Количество копий файла должно браться из диапазона.
1. как сделать, чтобы информацию о сохраняемых именах можно было брать не из одной ячейки (A1 в данном случае), а из диапазона? Пробовал поставить вместо A1 диапазон A1:A10. не получилось сохранить несколько файлов.
Догадываюсь, что надо назначить какую-то переменную для диапазона. Но, к сожалению, с макросами пока на Вы
Подскажите пожалуйста можно ли автоматизировать процесс сохранения? Например 1 раз в сутки и т.д.
Подскажите, пожалуйста. Как отключить весь функционал (макрос) у созданных копий. Формат сохранения .xls - но макрос работает и каждый раз создаются копии копий.
xlsx не поддерживает макросы.
Вопрос возник?
как имя файла сделать текущее имя файла?
FileNameXls = strPath & "\" & "Мой проект" & " " & strDate & ".xls" 'или xlsm
"мой проект"
Подскажите, можно ли макрос сделать таким образом, чтобы резервная копия книги сохранялась без формул (просто значения) которые содержаться в основной книге.
Спасибо!