Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
65 / 22 / 7
Регистрация: 28.02.2018
Сообщений: 211
1
Excel

Как правильно создать резервную копию книги?

05.03.2020, 11:21. Показов 6629. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Перед внесением изменений в книгу, хочется сохранить его резервную копию и продолжить работу в оригинальной.
Я использую код, который сохраняет файл под новым именем, после чего снова пересохраняет под старым (с заменой файла).
Есть какой-то более изящный способ? Работаю с файлами формата Excel 97-2003, метод SaveCopyAs использовать не удаётся.
Сам код выглядит так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub test_5_3_20_1()
Dim S_filename As String
S_filename = ActiveWorkbook.Name
 
'пересохранить файл под другим именем (в формате xls):
ActiveWorkbook.SaveAs Filename:="резервная копия.xls", FileFormat:=xlExcel8
 
'сохранить исходный файл с заменой (в формате xls):
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=S_filename, FileFormat:=xlExcel8
Application.DisplayAlerts = True
End Sub
P.S. пытался сохранять копию, открывать оригинал, закрывать копию,
но при этом макрос прекращает работу
(потому что выполняется из копии, а копию закрыли)
Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2020, 11:21
Ответы с готовыми решениями:

Нужно сделать резервную копию БД Access из Excel-я
Help! Нужно сделать резервную копию БД Access из Excel-я, т.е. скопировать базу из рабочего...

Как создать полную резервную копию системы CentOC 6.3
Всем привет ! Подскажите пожалуйта как мне сделать полную копию всей системы CentOS 6.3 ? Дело в...

Lenovo IdeaPad U310. Как создать резервную USB копию?
Добрый день. Купил новый указанный ноутбук с предустановленным Виндоус 7 ХОМЕ премиум в комплекте...

Подскажите, как создать образ/резервную копию уже установленной ОС с программами или без программ, драйверами и т.д.?
Здравствуйте. Подскажите, как создать образ/резервную копию уже установленной ОС с программами или...

12
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
05.03.2020, 12:19 2
viper-x, а попроще не хотите, воспользовавшись FileCopy? Т.е. открываете свой файл, копируете его (копируется не тот, что в экселе, а тот, что на диске - первозданный) куда надо без SaveAs и продолжаете с ним работать. Почитайте про FileCopy
1
65 / 22 / 7
Регистрация: 28.02.2018
Сообщений: 211
05.03.2020, 13:40  [ТС] 3
Burk, благодарю за подсказку!
Но, если я правильно понимаю,
в этом случае копируется открытый файл -
не будет из-за этого проблем?
Всегда ли корректно он копируется?
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
05.03.2020, 13:56 4
viper-x, вы невнимательно прочитали моё сообщение, а я специально для вас подчеркнул
копируется не тот, что в экселе, а тот, что на диске - первозданный) Из открытого файла запускается макрос с копированием. А копируется оригинал с диска, тот который вы загрузили. Вы можете запись исходного сделать и в конце работы, но только до этого не сохранять файл, но так лучше не надо, можете забыть.

Добавлено через 6 минут
могу только добавить, что я этим не пользовался, но, думаю, работать будет, проверьте, может и вопросы отпадут.
0
65 / 22 / 7
Регистрация: 28.02.2018
Сообщений: 211
05.03.2020, 14:32  [ТС] 5
Burk, так не получается.
на пробу создал файл Книга1.xls на диске d:\
и написал код:
Visual Basic
1
2
3
Sub test_5_3_20_4()
FileCopy "D:\Книга1.xls", "D:\Книга2.xls"
End Sub
когда эта книга открыта код выдаёт ошибку
Run-time error '70': Permission denied
когда закрыта - копируется.
думаю, это говорит о том, что скопировать
открытую книгу таким способом не удастся
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
05.03.2020, 19:38 6
viper-x, был уверен, что должно пройти, чего бы вдруг блокировать копирование, вот перемещение или удаление согласен. Недоработки экселя, но с этим приходится жить. Приду домой, посмотрю.

Добавлено через 2 часа 39 минут
viper-x, возможен такой вариант, не знаю будет ли он выглядеть лучше вашего, вам решать. Создаем файл-запускалку, который копирует ваш основной файл (он пока не открыт) через FileCopy, в следующей строке этого файла вызов вашего основного файла, а в основном файле в модуле ЭтаКнига в процедуре WorkBook_Open стоит закрытие запускалки.

Добавлено через 11 минут
Запускалку можно сделать как скрипт, тогда и закрывать её не нужно
0
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
05.03.2020, 20:09 7
Лучший ответ Сообщение было отмечено viper-x как решение

Решение

viper-x,
Попробуйте:
Visual Basic
1
2
3
4
5
6
Private Declare Function CopyFL _
Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
 
Sub FOR_viper()
CopyFL "D:\Книга1.xls", "D:\Книга2.xls", 0&
End Sub
1
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
05.03.2020, 20:23 8
Цитата Сообщение от viper-x Посмотреть сообщение
метод SaveCopyAs использовать не удаётся
- да вроде не было никаких проблем, только тип/формат файла нужно не путать. Рекордер подскажет.
Я помню делал бекап при каждом сохранении файла, т.е. все изменения, с временем в имени. А чистился этот мусорник от древних файлов при старте системы простецким скриптом, а то иначе можно сильно диск забить при активной работе...
0
65 / 22 / 7
Регистрация: 28.02.2018
Сообщений: 211
06.03.2020, 08:17  [ТС] 9
Narimanych, работает. Спасибо!
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
07.03.2020, 14:34 10
viper-x, а всё-таки, как я и предполагал, использовать CopyFile можно, только надо подключить соответствующую библиотеку VBA, ссылка в макросе.
Visual Basic
1
2
3
4
5
6
7
Sub CopyFileWithFSOBasic()
' подключить библиотеку "Microsoft Scripting Runtime" в Tools > References.
    Dim FSO As Scripting.FileSystemObject
    Set FSO = New Scripting.FileSystemObject
    Call FSO.CopyFile("D:\Книга1.xls", "D:\Книга2.xls", True)
' True - разрешается замена, если файл копии уже существует
End Sub
1
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
07.03.2020, 15:18 11
Burk,
Цитата Сообщение от Burk Посмотреть сообщение
' подключить библиотеку "Microsoft Scripting Runtime" в Tools > References.
Visual Basic
1
2
3
4
5
Sub CopyFileWithFSOBasic()
   With CreateObject("Scripting.FileSystemObject")
     Call .CopyFile("E:\MM\SSS.xlsm", "E:\MM\SDDD.xlsm", True)
  End With
End Sub
1
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
07.03.2020, 16:12 12
Narimanych,

Visual Basic
1
CreateObject("Scripting.FileSystemObject").CopyFile "E:\MM\SSS.xlsm", "E:\MM\SDDD.xlsm", True
1
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
07.03.2020, 16:21 13
pashulka,
Thnks….
0
07.03.2020, 16:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2020, 16:21
Помогаю со студенческими работами здесь

Python - не могу создать резервную копию
Вводится такой код (по задаче из книги Swaroop`a.) Cама задача: Составить программу, которая...

Не могу создать резервную копию БД почему?
почему не получается?

Невозможность создать резервную копию на сайте на Битриксе
Коллеги, подскажите кто сталкивался с проблемой и как решили: запускаю резервное копирование и в...

Как импортировать резервную копию реестра?
Добрый день господа. Ситуация такого характера: на этапе благополучной работы компьютера под...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru