Добрый день, уважаемые форумчане!
Сразу говорю, что в Excel я чайник, занимаюсь совершенно иным. Однако же, возникла необходимость…
Что нужно — чтобы в процессе работы с книгой Excel периодически выполнялось сохранение файла (текущей книги). Не автосохранение, которое можно прописать в Excel, а именно сохранение — эквивалент того, что происходит по Ctrl/S. Это нужно, чтобы Dropbox увидел изменившийся файл и создал новую версию файла — таким образом, мы получаем последовательность версий, отстоящих друг от друга, например, на 3 минуты, и если бухгалтер под действием выкуренной дури накосячит — чтобы можно было взять файл отчёта по состоянию на N минут назад. Всё бы хорошо, но автосохранение не трогает сам файл, с которым работают, — вместо этого некие данные пишутся в некие другие файлы, по которым Excel потом может что-то там восстановить — но это совсем не то, что нам требуется.
Порывшись немного в нете, сделал макрос (текст чуть ниже). Всё работает замечательно, каждые 3 минуты файл сохраняется, но теперь другая беда — кнопки «Отменить действие» и «Отменить отмену» при работе макроса неактивны.
Т.е., если я даже просто вношу число в ячейку, то удалить его можно только затерев вручную, отмены нет.
А теперь, собственно, вопросы…
1. Почему не работают кнопочки Undo / Redo, и как сделать, чтобы они работали?
2. Можно ли вызывать ActiveWorkbook.Save() по событиям таймера, программируя их с нужным интервалом, а не крутить в тесном цикле?
3. Возможно, проблему с регулярным сохранением файла можно решить вообще без макроса? (программировать бухгалтера на нажатие Ctrl/S каждые 3 минуты не предлагать )))
Sub Delay(dblSecs As Double)
Const OneSec As Double = 1# / (1440# * 60#)
Dim dblWaitTil As Date
dblWaitTil = Now + OneSec * dblSecs
Do Until Now > dblWaitTil
DoEvents ' Allow windows messages to be processed
Loop
End Sub
Sub Auto_Open()
Do Until False
Delay (180) ' Save the document every 180 seconds
ActiveWorkbook.Save
Loop
End Sub
Макрос автосохранения файлов Excel |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
0 / 0 / 0 Регистрация: 10.05.2016 Сообщений: 3 |
|
1 |
|
30.05.2016, 23:27. Показов 5794. Ответов 1
Помогите, пожалуйста с таким вопросом. Нужно чтобы документ автоматически сохранялся с периодичностью в секунду. Автосохранение необходимо производить в этот же документ или в любой заданный.
0 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||||||||||||||
31.05.2016, 13:29 |
2 |
|||||||||||||||
Module1 :
Модуль ЭтаКнига:
Добавлено через 1 час 2 минуты
0 |
Skip to content
Как создать резервную копию книги с сегодняшней датой
На чтение 2 мин. Просмотров 2.7k.
Что делает макрос: Макрос позволяет создать резервную копию книги и сохраняет ваш файл в папке с сегодняшней датой.
Содержание
- Как это работает
- Код макроса
- Как работает этот код
- Как использовать
Как это работает
Хитрость данного макроса заключается в сопоставлении частей файла. Новое имя файла состоит из трех частей: путь, исходный файл и сегодняшняя дата.
Путь определяем с помощью свойства Path объекта ThisWorkbook.
Второй частью нового файла является исходное имя файла. Мы используем свойство Name объекта ThisWorkbook.
Текущую дату берем с помощью функции Date. Вы заметите, что мы форматируем дату (Format (Date, «мм-дд-гг»)). Это происходит потому, что по умолчанию функция даты возвращает мм / дд / гггг. Мы используем дефис вместо слэша, иначе это вызовет ошибку при попытке сохранить файл (Windows не позволяет использовать «/» в именах файлов.)
Код макроса
Sub SozdatRezervnuyuKopiyu() 'Сохранить книгу с новым именем ThisWorkbook.SaveCopyAs _ Filename:=ThisWorkbook.Path & "" & _ Format(Date, "mm-dd-yy") & " " & _ ThisWorkbook.Name End Sub
Как работает этот код
Используем одну единственную строку, которая с помощью метода SaveCopyAs создает новый имя файла и использует метод для сохранения файла.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код во вновь созданном модуле.
Создание резервных копий ценных файлов
При работе с некоторыми особо ценными файлами, бывает необходимо периодически в течение рабочего дня сохранять его промежуточные версии, чтобы, при необходимости, иметь возможность к ним вернуться. Выполнять постоянно вручную команды «Файл — Сохранить как» утомительно, да и случайно можно вместо «Сохранить как» нажать на «Сохранить», похоронив этим большой кусок работы.
Если у вас 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, как их использовать?