Макрос сохранение файла excel по времени

 

Есть файл Книга1.xls. Этот файл сохранен в каталоге «Мои документы». Нужно, чтоб при работе с этим файлом он автоматически сохранялся через каждые 20 секунд. Можно ли создать такой макрос? Как будет выглядеть его полный код (VBA для меня – темный лес, умею только записывать действия в макрос)? И как его запустить один раз (пусть даже после, а не в момент открытия файла Книга1.xls) и до конца сеанса работы с файлом Книга1.xls?

 

ytk5kyky

Пользователь

Сообщений: 2410
Регистрация: 01.01.1970

В модуль ЭтаКнига:  
Private Sub Workbook_Open()  
Call save20  
End Sub  
Sub save20()  
Me.Save  
Application.OnTime Now + TimeValue(«00:00:20»), «save20»  
End Sub

 

Помогите, вставила этот макрос в оооочень важный файл, переделала его не под сохранение а закрытие, и теперь он открывется буквально на несколько секунд, я не могу ничего успеть. Что делать?????????? Я просто в отчаянии

 

не подумала, а как сделать чтоб закрывался через 30 сек?????

 

ytk5kyky

Пользователь

Сообщений: 2410
Регистрация: 01.01.1970

Я так понял, что 20 сек не хватало, а 30 вполне достаточно?  
Чтобы он не закрывался сразу, отключите макросы, повысив уровень безопасности.

 

{quote}{login=Лузер™}{date=22.07.2009 03:14}{thema=}{post}Я так понял, что 20 сек не хватало, а 30 вполне достаточно?  
Чтобы он не закрывался сразу, отключите макросы, повысив уровень безопасности.{/post}{/quote}  

      Я так и сделала )))) до того как мне кто-то ответил )))))) Все-таки женская логика существует, сейчас попробую ваш вариант по закрытию ))) Спасибо

 

Пишет что невозможно выполнить макрос в такой-то книге, возможно данный макрос отсутствует, либо все макросы отключены. Все у меня есть((((( Пока писала поняла в чем проблема, функцию Close30 в макросы засунуть нужно а не в КНИГУ1. ГЛУПАЯЯЯЯЯЯЯЯЯ

 

СПАСИБО ОГРОМНОЕ, на радостях поблагодарить забыла )))))

 

{quote}{login=Лузер™}{date=21.07.2009 02:43}{thema=}{post}В модуль ЭтаКнига:  
Private Sub Workbook_Open()  
Call save20  
End Sub  
Sub save20()  
Me.Save  
Application.OnTime Now + TimeValue(«00:00:20»), «save20»  
End Sub{/post}{/quote}  

  Я вставил указанный вами код в окно кода.    

  Private Sub Workbook_Open()  
Call save20  
End Sub  
Sub save20()  
Me.Save  
Application.OnTime Now + TimeValue(«00:00:20»), «save20»  
End Sub  

  При этом в окне Project у меня «ЭтаКнига» (была выделена) была вложена в «Microsoft Excel objects», последний был включен VBAProject (Книга1.xls)  
Я сохранил этот код (нажав на кнопку флопидиска) и запустил его через команду Run, но он мне через 20 секунд выдал сообщение «Не найден макрос «C:Documents and settingsМои ДокументыКнига1.xls’!save20′. Мне нужно, чтобы открытый файл сохранялся под своим же именем не один раз, а через каждые 20 секунд, пока я его не закрою.

 

вот это дело  

  Sub save20()  
Me.Save  
Application.OnTime Now + TimeValue(«00:00:20»), «save20»  
End Sub  

  переставьте в какой-нибудь Module, так как Workbook_Open ищет эту функцию именно там, а не в ЭтойКниге. Попробуйте

 

Private Sub Workbook_Open()  
Call save20  
End Sub  

  -Это код, который срабатывает при запуске файла. Он вызывает макрос save20?  
Я сам дундук по ВБА. Попробуй поэкспериментируй — замени в этом коде save20 на Макрос1, который просто будет, например, копировать содержимое одной ячейки в другую.

 

А давайте будем подписываться, а то не понятно, это мне предлагают функцию переименовать или просто еще помошники есть

 

Polisimus

Пользователь

Сообщений: 15
Регистрация: 01.01.1970

{quote}{login=Mario}{date=22.07.2009 05:28}{thema=}{post}А давайте будем подписываться, а то не понятно, это мне предлагают функцию переименовать или просто еще помошники есть{/post}{/quote}

 

Polisimus

Пользователь

Сообщений: 15
Регистрация: 01.01.1970

это я первоначальный автор вопроса  
я уже поэкспериментировал тут с — вместо save20 поставить уже записанный Макрос1.  
Да, действительно срабатывает. Так оно и есть — макрос запустил Макрос1 с открытием файла автоматически. А вот со вторым кодом я пока разбираюсь. Там нужно в окне проекты редактора ВБА просто вставить новый модуль. И в нем уже писать второй код? Сейчас попробую.

 

Polisimus

Пользователь

Сообщений: 15
Регистрация: 01.01.1970

Выдает ошибку:  
Compile error:  
Invalid use of Me keyword.

 

Polisimus

Пользователь

Сообщений: 15
Регистрация: 01.01.1970

{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
Регистрация: 01.01.1970

#18

22.07.2009 18:03:12

После открытия файла Книга1.xls я его тут же под этим же именем сохранил, но в текстовом формате. Запустил макрос save20. И он работает — сохраняет текст активного листа. Отлично!

Сохранение файла в определенное время

AVI

Дата: Пятница, 15.06.2018, 10:57 |
Сообщение № 1

Группа: Проверенные

Ранг: Ветеран

Сообщений: 523


Репутация:

17

±

Замечаний:
0% ±


Excel 2016

Добрый день!
Есть Excel файл и нужно каждый день сохранять резервную копию в отдельную папку.
Можно настроить, что бы файл с названием «Отчет лаборатория» каждый день, к примеру в 15.00, сохранялся в папку «C:UsersuserDesktopВ работе» в формате «Отчет лаборатория дата (в формате дд.мм.гггг)».
Не знаю, нужно прикладывать сам файл или нет.
Сам рабочий файл с совместным доступом.
Можно сделать так, что бы он сам не закрывался, а просто сохранялся как бы фоном, что бы оператор даже не замечал этого?

 

Ответить

StoTisteg

Дата: Пятница, 15.06.2018, 11:29 |
Сообщение № 2

Группа: Авторы

Ранг: Старожил

Сообщений: 1161


Репутация:

103

±

Замечаний:
0% ±


Excel 2010

AVI, мне кажется, это это будет правильнее поручить Аутлуку (если он есть), потому что иного точного решения в Экселе, кроме постоянно работающего в фоновом режиме макроса, я не вижу… А это, как Вы понимаете, жуткий костыль. Можно ещё макрос, проверяющий текущее время вызывать во всех приходящих в голову событиях, но это не точно и тоже не по фэншую…


Интуитивно понятный код — это когда интуитивно понятно, что это код.

 

Ответить

_Boroda_

Дата: Пятница, 15.06.2018, 11:30 |
Сообщение № 3

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Думаю, что в 15:00 сохранять — не очень хорошая идея. Именно в это время файл может быть в процессе редактирования. Но, допустим, Вы сохранили. А потом в 15:05 в файле кто-то что-то изменил — копия получится неактуальной.
Поэтому предлагаю создавать копию после сохранения исходного файла. Если сохраняли несколько раз, то будет копия последнего варианта.

И да — формат ДД.ММ.ГГГГ неудобен для сортировки файлов по названию. Гораздо удобнее ГГГГ.ММ.ДДД

И еше — копию нужно сохранять не в ту папку, где лежит исходник. На это специально сделана проверка в макросе. Если такого не будет, то при открытии и сохранении этой копии файла для копии создастся своя копия, а нам этого не нужно. Конечно можно сохранять копию в xlsx, но я не знаю — есть ли у Вас в том файле еще макросы и нужно ли их сохранять.

В модуль книги
[vba]

Код

Private Sub Workbook_AfterSave(ByVal Success As Boolean) ‘после сохранения файла
    If Success Then ‘если сохранение прошло успешно
        wbp_ = «C:UsersuserDesktopВ работе» ‘папка для сохранения
‘        wbp_ = «g:МояСтеретьДля копирования»‘это моя папка для проверки работы макроса.
        If ThisWorkbook.Path <> wbp_ Then ‘если папка этого файла не равна папке для сохранения
            Me.SaveCopyAs wbp_ & «Отчет лаборатория » & Format(Date, «YYYY_MM_DD») & «.xlsm» ‘сохранить копию в ту папку
        End If
    End If
End Sub

[/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

sboy

Дата: Пятница, 15.06.2018, 11:57 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

Добрый день.
Если надо именно по времени, то вот так можно (формат даты, как и у _Boroda_)
[vba]

Код

Private Sub Workbook_Open()
    Application.OnTime TimeValue(«15:00:00»), «save_»
End Sub
Sub save_()
    ThisWorkbook.SaveAs «C:UsersuserDesktopВ работеОтчет лаборатория » & Format(Date, «YYYY_MM_DD») & «.xls»
End Sub

[/vba]


Яндекс: 410016850021169

 

Ответить

StoTisteg

Дата: Пятница, 15.06.2018, 12:16 |
Сообщение № 5

Группа: Авторы

Ранг: Старожил

Сообщений: 1161


Репутация:

103

±

Замечаний:
0% ±


Excel 2010

sboy, и если в 15:00 файл будет закрыт… Ну Вы поняли.


Интуитивно понятный код — это когда интуитивно понятно, что это код.

 

Ответить

sboy

Дата: Пятница, 15.06.2018, 12:53 |
Сообщение № 6

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

.


Яндекс: 410016850021169

Сообщение отредактировал sboyПятница, 15.06.2018, 14:02

 

Ответить

AVI

Дата: Пятница, 15.06.2018, 15:15 |
Сообщение № 7

Группа: Проверенные

Ранг: Ветеран

Сообщений: 523


Репутация:

17

±

Замечаний:
0% ±


Excel 2016

_Boroda_, Спасибо за советы!
Не критично когда именно можно сохранять. Этот файл в течение рабочего дня постоянно редактируется и за один день восстановить информацию не сложно. Сохраняется он, во-первых, потому что коллеги могу сами это сделать или забывают. И, во-вторых, потому что мало ли кто возьмет и удалит основной рабочий файл.
По большому счету не важен и формат даты. В целом, можно просто делать копию файла с заменой. важен сам факт того, что есть резервная копия там, где она точно не исчезнет. Тут есть вероятность того, что кто-то что-то внутри файла может понаудалять, поэтому и нужно хранить несколько копий, что бы коцаный файл случайно не заменил резервную копию.
В файле больше нет макросов и не планируется быть.
Адрес сохранения копии отличен от адреса самого исходника. Важно, что он для совместного доступа и важно, что исходник лежит в сетевой папке на серваке.

Поэтому предлагаю создавать копию после сохранения исходного файла. Если сохраняли несколько раз, то будет копия последнего варианта.

Это был бы идеальный вариант, но боюсь, что пользователи совсем не будут тыкать кнопочку «сохранить».

 

Ответить

_Boroda_

Дата: Пятница, 15.06.2018, 15:25 |
Сообщение № 8

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

боюсь, что пользователи совсем не будут тыкать кнопочку «сохранить»

Что значит «не будут»? Открыл файл — что-то поменял — закрыл — Excel сам предложит сохранить — ответ «Да» — автоматически создается копия, ответ «нет» — копию и не нужно создавать
Так я така и сделал. И даже код макроса приложил в сообщении. И даже файл с макросом


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

AVI

Дата: Пятница, 15.06.2018, 17:12 |
Сообщение № 9

Группа: Проверенные

Ранг: Ветеран

Сообщений: 523


Репутация:

17

±

Замечаний:
0% ±


Excel 2016

_Boroda_, Спасибо!! Все работает)

 

Ответить

0 / 0 / 0

Регистрация: 11.11.2009

Сообщений: 28

1

02.05.2012, 16:51. Показов 6682. Ответов 11


Студворк — интернет-сервис помощи студентам

нужно чтобы без прерывания работающих форм документ сохранялся в 23:00. под именем действующей даты!

Добавлено через 1 час 59 минут
каждый раз сохраняется в новый фаил!



0



Апострофф

Заблокирован

02.05.2012, 19:03

2

Цитата
Сообщение от Ромашка
Посмотреть сообщение

без прерывания работающих форм документ сохранялся в 23:00.

Поясни, о чём эта фраза? Что за формы? Модальные или нет? Пользовательские (типа UserForm1) или системные (типа SaveAs… или Найти и заменить)?
Не буду утверждать, но от этого может зависеть результат…



0



0 / 0 / 0

Регистрация: 11.11.2009

Сообщений: 28

02.05.2012, 19:13

 [ТС]

3

формы пользовательские, при открытии документа они сразу щапускаются, юзер не видит что происходит в самом документе! мне надо чтобы этот документ сам сохранялся в папку, а вместо имени была дата сохранения! все это должно происходить не закрывая формы и рабочий документ через который запущенный формы и без всяких уведомлений!



0



Апострофф

Заблокирован

02.05.2012, 19:27

4

Попробуй —



1



0 / 0 / 0

Регистрация: 11.11.2009

Сообщений: 28

02.05.2012, 19:54

 [ТС]

5

как настроить авто сохранение есть! спасибо большое!)))
а как сделать чтобы каждый раз но сохранял файл с именем равным дата?

Добавлено через 13 минут
все нашел и про сохранение, спасибо

Добавлено через 2 минуты
кстати он переписывает фаил или все таки в разные записывает?



0



Апострофф

Заблокирован

02.05.2012, 20:03

6

Цитата
Сообщение от Ромашка
Посмотреть сообщение

он переписывает фаил или все таки в разные записывает?

Он делает всё согласно заданию — перезаписывает файл в указанное время без лишних вопросов!
Надеюсь, разобрался, что здесь надо первую строчку удалить (заремить), а вторую — разремить (убрать апостроф)

Visual Basic
1
2
Application.OnTime Now + CDate("00:00:10"), "SaveDoc"
'Application.OnTime date + CDate("23:00:00"), "SaveDoc"

Отлаживать сутками, дожидаясь 23:00 стрёмно

ЗЫ: И имя файла в формате ГГММДД я считаю наиболее удобным в плане последующих сортировок, поисков и т.д.



2



Эксперт WindowsАвтор FAQ

17993 / 7619 / 890

Регистрация: 25.12.2011

Сообщений: 11,352

Записей в блоге: 17

02.05.2012, 20:05

7

Если будете сохранять 1 раз в сутки (23.00), то разные файлы (по дате).
Если чаще, естественно код нужно видоизменять, например добавлять время сохранения к имени файла.



0



0 / 0 / 0

Регистрация: 11.11.2009

Сообщений: 28

02.05.2012, 20:43

 [ТС]

8

товарищи большое спасибо!!!
вы нереально мне помогли, после этого надеюсь полкан от меня отстанет!
спасибо еще раз!

Добавлено через 6 минут
а куда он сохраняет документ?



0



Апострофф

Заблокирован

02.05.2012, 20:46

9

Visual Basic
1
ThisWorkbook.SaveAs ThisWorkbook.Path & "" & Format$(Date, "YYMMDD") & ".xls"

Какой момент в этом коде вызывает вопрос?



0



0 / 0 / 0

Регистрация: 11.11.2009

Сообщений: 28

02.05.2012, 20:53

 [ТС]

10

блин он сохраняет но не автоматически а в ручную!



0



Апострофф

Заблокирован

02.05.2012, 21:29

11

Цитата
Сообщение от Ромашка
Посмотреть сообщение

он сохраняет но не автоматически а в ручную!

А поподробнее можно? Прикладывай своё творение ввиде XLS-файла (скрепка в расширенном режиме, выбрать, !загрузить!!!) Никому уже не понять, что Вы там с полканом учудили



0



0 / 0 / 0

Регистрация: 11.11.2009

Сообщений: 28

02.05.2012, 22:02

 [ТС]

12

к сожалению не могу! это давольно токи секретный проэкт! все делаю по тому листу который ты дал! проверил три раза пока не запустишь макрос вручную ни чего не сохраняется!

Добавлено через 1 минуту
я постораюсь сейчас скинуть пока полкана нет!



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

02.05.2012, 22:02

Помогаю со студенческими работами здесь

Заданное время в vb
Помогите, пожалуйста, написать программу, в которой показывается время, введенное пользователем с…

Заданное время
Здравствуйте!
Подскажите пожалуйста, как сделать чтобы в заданное время выполнялось действие, к…

Вывод в заданное время
Как сделать, чтобы, например сообщение &quot;привет&quot; появилось на сайте 3 декабря и убралось 4 декабря?

MessageBox на заданное время…
Должен же быть такой. Выскакивает окно с сообщением и через некоторое заданное время само…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

12

Добрый день, уважаемые форумчане!

Сразу говорю, что в 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

Skip to content

Как создать резервную копию книги с сегодняшней датой

На чтение 2 мин. Просмотров 2.7k.

Что делает макрос: Макрос позволяет создать резервную копию книги и сохраняет ваш файл в папке с сегодняшней датой.

Содержание

  1. Как это работает
  2. Код макроса
  3. Как работает этот код
  4. Как использовать

Как это работает

Хитрость данного макроса заключается в сопоставлении частей файла. Новое имя файла состоит из трех частей: путь, исходный файл и сегодняшняя дата.

Путь определяем с помощью свойства 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 создает новый имя файла и использует метод для сохранения файла.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код во вновь созданном модуле.

Понравилась статья? Поделить с друзьями:
  • Макрос создающий папку excel
  • Макрос создать таблицу в word
  • Макрос создать столбец в excel
  • Макрос создать папку если ее нет excel
  • Макрос создать окно excel