Макрос автосохранения файлов Excel |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Добрый день, уважаемые форумчане!
Сразу говорю, что в 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
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.
- Введите или вставьте код во вновь созданном модуле.
Есть файл Книга1.xls. Этот файл сохранен в каталоге «Мои документы». Нужно, чтоб при работе с этим файлом он автоматически сохранялся через каждые 20 секунд. Можно ли создать такой макрос? Как будет выглядеть его полный код (VBA для меня – темный лес, умею только записывать действия в макрос)? И как его запустить один раз (пусть даже после, а не в момент открытия файла Книга1.xls) и до конца сеанса работы с файлом Книга1.xls? |
|
ytk5kyky Пользователь Сообщений: 2410 |
В модуль ЭтаКнига: |
Помогите, вставила этот макрос в оооочень важный файл, переделала его не под сохранение а закрытие, и теперь он открывется буквально на несколько секунд, я не могу ничего успеть. Что делать?????????? Я просто в отчаянии |
|
не подумала, а как сделать чтоб закрывался через 30 сек????? |
|
ytk5kyky Пользователь Сообщений: 2410 |
Я так понял, что 20 сек не хватало, а 30 вполне достаточно? |
{quote}{login=Лузер™}{date=22.07.2009 03:14}{thema=}{post}Я так понял, что 20 сек не хватало, а 30 вполне достаточно? Я так и сделала )))) до того как мне кто-то ответил )))))) Все-таки женская логика существует, сейчас попробую ваш вариант по закрытию ))) Спасибо |
|
Пишет что невозможно выполнить макрос в такой-то книге, возможно данный макрос отсутствует, либо все макросы отключены. Все у меня есть((((( Пока писала поняла в чем проблема, функцию Close30 в макросы засунуть нужно а не в КНИГУ1. ГЛУПАЯЯЯЯЯЯЯЯЯ |
|
СПАСИБО ОГРОМНОЕ, на радостях поблагодарить забыла ))))) |
|
{quote}{login=Лузер™}{date=21.07.2009 02:43}{thema=}{post}В модуль ЭтаКнига: Я вставил указанный вами код в окно кода. Private Sub Workbook_Open() При этом в окне Project у меня «ЭтаКнига» (была выделена) была вложена в «Microsoft Excel objects», последний был включен VBAProject (Книга1.xls) |
|
вот это дело Sub save20() переставьте в какой-нибудь Module, так как Workbook_Open ищет эту функцию именно там, а не в ЭтойКниге. Попробуйте |
|
Private Sub Workbook_Open() -Это код, который срабатывает при запуске файла. Он вызывает макрос save20? |
|
А давайте будем подписываться, а то не понятно, это мне предлагают функцию переименовать или просто еще помошники есть |
|
Polisimus Пользователь Сообщений: 15 |
{quote}{login=Mario}{date=22.07.2009 05:28}{thema=}{post}А давайте будем подписываться, а то не понятно, это мне предлагают функцию переименовать или просто еще помошники есть{/post}{/quote} |
Polisimus Пользователь Сообщений: 15 |
это я первоначальный автор вопроса |
Polisimus Пользователь Сообщений: 15 |
Выдает ошибку: |
Polisimus Пользователь Сообщений: 15 |
{quote}{login=The_Prist}{date=22.07.2009 05:42}{thema=}{post}Если макрос в Module1(Модуль1), то следует заменить Me на thisWorkbook{/post}{/quote} Работает! Есть! |
{quote}{login=The_Prist}{date=22.07.2009 05:42}{thema=}{post}Если макрос в Module1(Модуль1), то следует заменить Me на thisWorkbook{/post}{/quote} Ага, как в моем примере с закрытием |
|
Polisimus Пользователь Сообщений: 15 |
#18 22.07.2009 18:03:12 После открытия файла Книга1.xls я его тут же под этим же именем сохранил, но в текстовом формате. Запустил макрос save20. И он работает — сохраняет текст активного листа. Отлично! |