Резервное копирование excel vba
Данный макрос позволяет упростить процедуру сохранения активного листа в книге Excel в отдельный файл.
Для использования этого макроса на любом листе в книге Excel создайте кнопку, и назначьте ей макрос СохранитьЛистВФайл.
При запуске макроса (нажатии кнопки) будет выведено диалоговое окно выбора имени для сохраняемого файла, после чего текущий лист будет сохранён под заданным именем в выбранной папке.
Сохранение производится в формате XLS (формат Excel 2003)
Если пользователь отказался от ввода имени файла (нажал клавишу ESC или кнопку «Отмена» в диалоговом окне),
то сохранения листа в файл не происходит.
PS: Кто-то может сказать, что для сохранения листа в файл в объектной модели Excel есть метод SaveAs, применимый к объекту Worksheet.
Но, как ни странно, выполнение кода ActiveSheet.SaveAs "" приводит к сохранению книги целиком, что равносильно использованию кода ActiveWorkbook.SaveAs ""
Почему этот метод сохранения работает так нелогично - лично мне не понятно (видимо, Microsoft что-то там перемудрил)
Комментарии
Спасибо. Разобрался. Нашёл ошибки в библиотеках.)
Спасибо. Всё запустил, но не работает. Пишет не найден проект или библиотека. Простите, не уточнил, поменял ещё саму систему (был XP стал Win7 x64).
Вот мой код:
Private Sub CommandButton2_Click()
On Error Resume Next
Const REPORTS_FOLDER = "C:\Users\. \. \. "
MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
FileName = [b8] & "_" & [b6] & "_" & [b4] & "_" & Format([b2], "DDMMMMYY") & "_" & [c2] & ".xlsx"
Err.Clear: Worksheets(Array(. ", ". ")).Copy: DoEvents
If Err Then Exit Sub
If ActiveWorkbook.Worksheets.Count = 2 And ActiveWorkbook.Path = "" Then
ActiveWorkbook.SaveAs FileName, xlWorkbookNormal
ActiveWorkbook.Close False
End If
End Sub
Убедитесь, что макросы вообще включены в настройках Excel.
Перед запуском файла с макросами, необходимо выполнить следующее:
> найти файл с макросами в папке
> щелкнуть правой кнопкой мыши на файле - Свойства - Разблокировать - ОК
> и только после этого запускать
Перешёл с 2007 на Office 2016, перестали работать макросы. И этот. (((
Добрый день, подскажите, пожалуйста, что надо изменить в макросе, чтобы:
1. Он копировал не весь лист целеком, а только диапазон ВИДИМЫХ ячеек (A1:L50), т.к. этот диапазон только часть отфильтрованного списка.
2. Он копировал только значения, без формул ячеек.
Здравствуйте, Алексей
Да, можно такое сделать, - могу написать макрос под заказ.
Здравствуйте, Игорь.
Подскажите, пожалуйста, возможно ли такое, чтобы Лист можно было сохранять не единожды (по имени в одной ячейке) а сославшись на какой-либо диапазон ячеек. Есть потребность сделать в конкретной папке количество файлов соответствующее количеству дней в месяце(отчет на каждый день). Если в диапазоне ячеек указать даты месяца и по нажатию макрос сохранял бы, файлы с именем Даты.
Можете написать макрос под заказ? Мне надо до понедельника
Напишите ваши контакты, есть несколько задач.
Дмитрий, можем сделать вам макрос под заказ.
Оформляйте заказ, прикрепляйте файл (в который надо встроить макрос), и подробно описывайте, что куда в каком виде и под каким именем сохранять.
Дело в том, что в книге порядка 20-30 листов и каждый лист необходимо сохранить в отдельные папки, соответствующие имени листа.
Дмитрий, а куда уж проще-то. вы нажимаете одну кнопку «Печать», и получаете готовый файл JPG
Зачем ещё-то упрощать.
Можно, конечно, и макрос под заказ написать
Если в формат BMP (или EMF) картинку сохранять - то макрос несложный, если в формат JPG - то макрос сложнее будет (и дороже)
Но я бы на вашем месте не стал изобретать велосипед, а оставил бы все как есть.
Сохраняю листы в JPEG формате, при помощи виртуального принтера "universal document converter" возможно ли упростить процедуру сохранения активного листа?
On Error Resume Next
Const REPORTS_FOLDER = "Двери\"
' название подпапки, в которую по-умолчанию будет предложено сохранить файл
MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
' создаём папку для файла, если её ещё нет
ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
' выбираем стартовую папку
Filename = Range("a17") & ("b17") & ".xls"
' вывод диалогового окна для запроса имени сохраняемого файла
If VarType(Filename) = vbBoolean Then Exit Sub
' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
Dim Ar(), ArAll&(), Sh As Excel.Worksheet, n
Select Case Sheets(1).[Условие]
Case 1
Ar = Array(3)
Case Else
End Select
ActiveWorkbook.Close False
End Sub
pdfFilename = Application.DefaultFilePath & Application.PathSeparator & "имя файла" & Range("D9").Value & ".pdf"
WB.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=pdfFilename, OpenAfterPublish:=False
При этом файл создается с названием "имя файла.pdf" начисто игнорируя содержимое ячейки указанной.
Вот макрос, который сохраняет без ограничения 255-ти символов в ячейке:
Резервное копирование данных - один из самых безопасных способов защиты информации. Данный макрос помогает минимизировать время на создание сохраненной копии файла Excel.
Когда это необходимо?
Описание работы
Для создания резервной копии файла Excel нужно нажать на команду Резервное копирование. Кнопка расположена на вкладке VBA-Excel, которая появится после установки надстройки.
В появившемся диалоговом окне останется только выбрать местоположение и имя копии файла. По умолчанию указана папка, текущего файла. В качестве имени файла указывается имя текущего файла с добавлением даты и времени резервной копии. Вы можете изменить имя на любое удобное.
Программа создаст копию файла, т. е. НЕ затронет текущий файл, в котором вы сейчас работаете.
Автоматическое резервное копирование
В надстройке также имеется возможно автоматического резервного копирования выбранного файла через заданное время. Для этого требуется выбрать опцию Автоматическое резервное копирование и указать количество часов, минут и секунд, через которое будет запускаться копирование.
Сохранение настроек
Вы можете сохранить заданные настройки и использовать их в других файлах. Для этого установите опцию Сохранить настройки.
Остановка автоматического резервного копирования
Для отмены резервного копирования достаточно перейти на вкладку VBA-Excel и нажать левой кнопкой мыши на Резервное копирование и выбрать Отмена резервного копирования.
Надстройка для Excel содержит большой набор полезных функций, с помощью которых вы значительно сократите время и увеличите скорость работы с программой.
Помогите пожалуйста написать макрос для резервного копирования книги Excel. Т.е. есть книга и нужно, чтобы запустив макрос, она сохранялась в файл, в названии которого есть текущая дата и время .
Originally posted by Lev_ru
Помогите пожалуйста написать макрос для резервного копирования книги Excel. Т.е. есть книга и нужно, чтобы запустив макрос, она сохранялась в файл, в названии которого есть текущая дата и время .
В ескселе это и так есть.
Нажми сохранить->Сервис->Общие параметры
и там поставь галочку "Всегда создавать резервную копию"
ActiveWorkbook.SaveAs Filename:= _
"C:\NAMEFILE.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
Originally posted by Lev_ru
Помогите пожалуйста написать макрос для резервного копирования книги Excel. Т.е. есть книга и нужно, чтобы запустив макрос, она сохранялась в файл, в названии которого есть текущая дата и время .
Если надо время и дату, то используй Time,Date
В ескселе это и так есть.
Нажми сохранить->Сервис->Общие параметры
и там поставь галочку "Всегда создавать резервную копию"
ActiveWorkbook.SaveAs Filename:= _
"C:\NAMEFILE.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
Спасибо за помощь!
Не могли бы Вы еще помочь?
ActiveWorkbook.SaveAs Filename:= _"C:\NAMEFILE.xls". Как сделать, чтобы вместо namefile автоматически вставлялась текущая дата. Как я понимаю, необходимо ввести некую переменную, которая была бы равна текущей дате. И вставить ее вместо namefile.xls. Но с VBA кодом у меня проблемы, я его очень мало знаю. Я только месяц назад взялся за его небольшое изучение. Литературы нет, приходится качать с сайта Microsoft примеры и выдирать куски кода для изучения.
Sub ReservSave(d. )
d=Текущая дата.
ActiveWorkbook.SaveAs Filename:=d, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _, CreateBackup:=False
End Sub
Помгите кто может.
Originally posted by Lev_ru
Спасибо за помощь!
Не могли бы Вы еще помочь?
ActiveWorkbook.SaveAs Filename:= _"C:\NAMEFILE.xls". Как сделать, чтобы вместо namefile автоматически вставлялась текущая дата. Как я понимаю, необходимо ввести некую переменную, которая была бы равна текущей дате. И вставить ее вместо namefile.xls. Но с VBA кодом у меня проблемы, я его очень мало знаю. Я только месяц назад взялся за его небольшое изучение. Литературы нет, приходится качать с сайта Microsoft примеры и выдирать куски кода для изучения.
Sub ReservSave(d. )
d=Текущая дата.
ActiveWorkbook.SaveAs Filename:=d, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _, CreateBackup:=False
End Sub
Помгите кто может.
"d=Текущая дата. "
d = Date + Time +".xls"
Я извинияюсь за свою настойчивость, но ничего не получается.
Sub Test()
d = Date + Time + ".xls"
ActiveWorkbook.SaveAs Filename:=d, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
End Sub
VBA ругается на d (Type Mismatch).
И еще вопрос: как сделать, чтобы макрос запускался в указанное время при открытии книги.
Я извинияюсь за свою настойчивость, но ничего не получается.
Sub Test()
d = Date + Time + ".xls"
ActiveWorkbook.SaveAs Filename:=d, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
End Sub
VBA ругается на d (Type Mismatch).
И еще вопрос: как сделать, чтобы макрос запускался в указанное время при открытии книги.
Выбери в редакторе "Эта книга"
Потом там где "General" Выбери "WorkBook" А с права выбери событие, если тебе надо его запустить при открытие, то пиши в "Open"
Private Sub Workbook_Open()
.
End Sub
Выбери в редакторе "Эта книга"
Потом там где "General" Выбери "WorkBook" А с права выбери событие, если тебе надо его запустить при открытие, то пиши в "Open"
Private Sub Workbook_Open()
.
End Sub
В общем, нужно вырезать из имени файла двоеточие, которое содержится во времени, и кроме этого когда получаешь в переменную дату и время - переводи ее в строковый тип:
d = Date
d = Str(d)
ну или проще
d=str(date)
А вот рабочий примерчик:
Sub Test()
d = Str(Date)
t = Str(Time)
hh = Mid(t, 1, 2)
mm = Mid(t, 4, 2)
ss = Mid(t, 7, 2)
t = hh & "." & mm & "." & ss
FN = d & "_" & t & ".xls"
MsgBox FN
ActiveWorkbook.SaveAs Filename:=FN, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
End Sub
А если сохранение файла необходимо при открытии книги, просто присвой имени макроса
Auto_Open()
'Код для сохранения
End Sub
При открытии книги она будет сохранятся с текущей датой и временем. Вроде все. :)
Покеда!
Originally posted by DKef
А если сохранение файла необходимо при открытии книги, просто присвой имени макроса
Auto_Open()
'Код для сохранения
End Sub
При открытии книги она будет сохранятся с текущей датой и временем. Вроде все. :)
Покеда!
Вот прислали аналог:
Application.OnTime TimeValue("12:00:00"), "CrtBackup"
Sub CrtBackup()
strName = Application.Workbooks(1).Name
strNewName = Date$
Application.Workbooks(1).SaveAs strNewName
Application.Workbooks(1).SaveAs strName
End Sub
Вот то, что получилось в конечном итоге:
Sub CrtBackup()
Unload frmAsk
With Application
.DefaultFilePath = "" 'Установить текущую папку
End With
Set fs = CreateObject("Scripting.FileSystemObject")
If Not fs.FolderExists("BackUp") Then 'Если папки Backup нет, то создать её
fs.CreateFolder ("Backup")
End If
Application.DisplayAlerts = False 'Не отображать предупреждения
strName = Application.Workbooks(1).FullName 'Настоящее имя книги
strNewName = "BackUp\" + Date$ 'Новое имя файла книги с датой
Application.Workbooks(1).SaveAs strNewName 'Сохранить как новое название книги
Application.Workbooks(1).SaveAs strName 'Сохранить как настоящее название книги
Application.DisplayAlerts = True 'Отображать предупреждения
End Sub
В "ThisWorkbook" можно написать следующее:
Private Sub Workbook_Activate()
Application.OnTime TimeValue("12:00:00"), "CrtBackup" 'Делать резервную копию в 12 часов
Application.OnTime TimeValue("18:00:00"), "CrtBackup" 'Делать резервную копию в 18 часов
End Sub
Здравствуйте!
Перед внесением изменений в книгу, хочется сохранить его резервную копию и продолжить работу в оригинальной.
Я использую код, который сохраняет файл под новым именем, после чего снова пересохраняет под старым (с заменой файла).
Есть какой-то более изящный способ? Работаю с файлами формата Excel 97-2003, метод SaveCopyAs использовать не удаётся.
Сам код выглядит так:
P.S. пытался сохранять копию, открывать оригинал, закрывать копию,
но при этом макрос прекращает работу
(потому что выполняется из копии, а копию закрыли)
Спасибо!
Нужно сделать резервную копию БД Access из Excel-я
Help! Нужно сделать резервную копию БД Access из Excel-я, т.е. скопировать базу из рабочего.
Как создать полную резервную копию системы CentOC 6.3
Всем привет ! Подскажите пожалуйта как мне сделать полную копию всей системы CentOS 6.3 ? Дело в.
Lenovo IdeaPad U310. Как создать резервную USB копию?
Добрый день. Купил новый указанный ноутбук с предустановленным Виндоус 7 ХОМЕ премиум в комплекте.
Подскажите, как создать образ/резервную копию уже установленной ОС с программами или без программ, драйверами и т.д.?
Здравствуйте. Подскажите, как создать образ/резервную копию уже установленной ОС с программами или.
viper-x, а попроще не хотите, воспользовавшись FileCopy? Т.е. открываете свой файл, копируете его (копируется не тот, что в экселе, а тот, что на диске - первозданный) куда надо без SaveAs и продолжаете с ним работать. Почитайте про FileCopy
Burk, благодарю за подсказку!
Но, если я правильно понимаю,
в этом случае копируется открытый файл -
не будет из-за этого проблем?
Всегда ли корректно он копируется?
Добавлено через 6 минут
могу только добавить, что я этим не пользовался, но, думаю, работать будет, проверьте, может и вопросы отпадут.
когда эта книга открыта код выдаёт ошибку
Run-time error '70': Permission denied
когда закрыта - копируется.
думаю, это говорит о том, что скопировать
открытую книгу таким способом не удастся
viper-x, был уверен, что должно пройти, чего бы вдруг блокировать копирование, вот перемещение или удаление согласен. Недоработки экселя, но с этим приходится жить. Приду домой, посмотрю.
Добавлено через 2 часа 39 минут
viper-x, возможен такой вариант, не знаю будет ли он выглядеть лучше вашего, вам решать. Создаем файл-запускалку, который копирует ваш основной файл (он пока не открыт) через FileCopy, в следующей строке этого файла вызов вашего основного файла, а в основном файле в модуле ЭтаКнига в процедуре WorkBook_Open стоит закрытие запускалки.
Добавлено через 11 минут
Запускалку можно сделать как скрипт, тогда и закрывать её не нужно
Во вложении - файл, при запуске которого автоматически срабатывает такой макрос
При открытии этого файла, если включены макросы, в папке My Program Backups будет сохранена копия книги в формате ZIP (архив)
Папка, если таковая не существует, будет автоматически создана макросом.
Функция для разархивирования (извлечения файлов из архива ZIP)
Комментарии
Ни разу с таким не сталкивался (не делал многотомные архивы), так что не могу подсказать
Подскажите пожалуйста как создать многотомный архив ZIP и задать размер частей.
Подскажите пожалуйста а как добавить к имени архива путь исходного файла - это нужно например в том случае если имена документов одинаковые? а расположение разное (с учетом того что архив создается не в текущей папке как в примере, а в одну конкретную папку - например D:\backup). Используя приведенный пример(с изменением папки назначения) невозможно отличить резервную копию файла "отчет1" из папки "декабрь" от "отчет1" из папки "ноябрь"
Функция Zip_File ругается если в пути архивируемого файла есть символы «». Есть ли способ обойти это ограничение?
Дмитрий, да, так и должен делать этот код.
Так устроена работа с ZIP в windows
Для распаковки можно использовать WinRAR - быстрее будет. Примеры кода вроде были у меня на сайте.
Подскажите, это только у меня при использовании функции UnZip_File в момент, когда исполняется оператор
oApp.Namespace(DestinationFolder).CopyHere oApp.Namespace(FileNameZip).Items
система автоматически создает в TEMP (c:\Documents and Settings\User\Local Settings\Temp\) папку "Временная папка 1 для имя.zip"
куда параллельно распаковывает архив. Из-за чего извлечение происходит значительно медленнее архивации
При использовании ThisWorkbook.SaveCopyAs FileNameXls
все гиперссылки на папки в сетевом окружении в текущем файле изменяют своё значение с Папка1\Папка2 на ..\Папка1\Папка2
Причем количество "..\" зависит от места копирования, прописанного в FileNameXls (чем глубже папка сохранения относительно текущего файла, тем больше "..\").
Соответственно, все ссылки в текущем файле перестают работать.
Программа продолжает работу с оригинальным файлом
Если нужна копия листа - нужен немного другой код:
1) создаете копию 4-го листа методом Copy
например, ThisWorkbook.worksheets(4).copy
2) сохраняете активную книгу (которая создалась при копировании листа) под заданным именем
например: ActiveWorkbook.SaveAs FileNameXls
3) закрываете книгу-бекап без повтороного сохранения:
ActiveWorkbook.Close False
PS: если сами не разберетесь - всегда можно оформить заказ на сайте
Подскажите пожлста, у меня 2 вопроса. Первый-с каким файлом будет продолжена работа после сохранения, с тем который забэкапился или с оригиналом? И второй- можно ли как то сохранять не всю книгу, а определенный лист от нее? Например-программа состоит из 4 листов, на 4 листе сводная информация. Нужно чтобы создалась копия файла, только с этим единственным 4 листом.
[quote]но код приведён в другой статье.[/quote]
Не подскажете в какой?
Поиском по сайту не могу найти.
А зачем прописывать в коде какую-то задержку.
Команды ведь последовательно выполняются, - пока архив не создастся, письмо не начнёт формироваться.
И вообще, - в каком формате-то вы архив создаете?
Вы пишете комментарий в статье, где пример кода только для ZIP архивов, - они создаются медленно, средствами Windows.
А изначально вы писали про архив RARб - там совсем другой макрос используется, более надежный и быстрый, - но код приведён в другой статье.
Спасибо за разьяснения.
Тут собственно из папки размером 42мб получается архивный файл 5,6 мб и задержка во времени вот пока эти 5,6 мб пишутся на диск.
У меня сделано сейчас с задержкой времени на 8 сек перед отправкой файла, а на другом компе оказывается этого времени мало, нужно увеличивать.
Вот и думал, может как-то можно этот момент проскочить:).
Виктор, без файла не получится.
Даже если бы получилось (что невозможно без реализации алгоритма WinRAR в VBA) - к письму-то всё равно прикрепляется именно файл, а не область оперативной памяти.
WinRAR моментально создает архивы (если вы не многомегабайтные файлы формируете), - так что не понимаю, в чем проблема.
Сделал на основе Ваших кодов архивирование и отправку на почту рабочей папки с помощью WinRar.
Все получается, но возник вопрос:
Есть-ли возможность не создавать(не писать на диск) файл .rar, т.е. создавать его в памяти?
Сейчас у меня работает все классически - создается папка, из нее файл архива пишется на диск, затем удаляется исходная папка (командой rar), файл архива отправляется на почту и затем удаляется. Самое ненужное здесь - это запись на файла на диск перед отправкой, да и время занимает, приходится как-то выкручиваться, ждать перед отправкой файла на почту.
Если запускать на жестком диске (даже подключенном по USB) - работает. При запуске с флэшки ищет новые тома архива (? :) ) (w7x64 office2k10 x64)
Здравствуйте, Дмитрий.
Конечно, это возможно.
Оформляйте заказ на сайте, прикрепляйте свой файл с макросом,
подробно опишите, что, куда, под каким именем, и как часто, должно сохраняться.
Для создания архивов RAR нужна программа WinRAR - она у вас установлена?
Это конечно все хорошо, у меня такой вопрос, у меня имеется макрос который сохраняет книгу, дубликат, с последующей замены его, и создает дубликат на каждый месяц, суть в чем, мне бы хотелось видоизменить этот макрос, что бы сохранял в архив.rar, возможно ли такое?
С Уважением Дмитрий!
Читайте также: