Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
 Аватар для viper-x
65 / 22 / 7
Регистрация: 28.02.2018
Сообщений: 214
Excel

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Перед внесением изменений в книгу, хочется сохранить его резервную копию и продолжить работу в оригинальной.
Я использую код, который сохраняет файл под новым именем, после чего снова пересохраняет под старым (с заменой файла).
Есть какой-то более изящный способ? Работаю с файлами формата 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.03.2020, 11:21
Ответы с готовыми решениями:

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

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

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

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

Добавлено через 6 минут
могу только добавить, что я этим не пользовался, но, думаю, работать будет, проверьте, может и вопросы отпадут.
0
 Аватар для viper-x
65 / 22 / 7
Регистрация: 28.02.2018
Сообщений: 214
05.03.2020, 14:32  [ТС]
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
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
05.03.2020, 19:38
viper-x, был уверен, что должно пройти, чего бы вдруг блокировать копирование, вот перемещение или удаление согласен. Недоработки экселя, но с этим приходится жить. Приду домой, посмотрю.

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

Добавлено через 11 минут
Запускалку можно сделать как скрипт, тогда и закрывать её не нужно
0
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
05.03.2020, 20:09
Лучший ответ Сообщение было отмечено 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
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
05.03.2020, 20:23
Цитата Сообщение от viper-x Посмотреть сообщение
метод SaveCopyAs использовать не удаётся
- да вроде не было никаких проблем, только тип/формат файла нужно не путать. Рекордер подскажет.
Я помню делал бекап при каждом сохранении файла, т.е. все изменения, с временем в имени. А чистился этот мусорник от древних файлов при старте системы простецким скриптом, а то иначе можно сильно диск забить при активной работе...
0
 Аватар для viper-x
65 / 22 / 7
Регистрация: 28.02.2018
Сообщений: 214
06.03.2020, 08:17  [ТС]
Narimanych, работает. Спасибо!
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
07.03.2020, 14:34
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
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
07.03.2020, 15:18
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
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
07.03.2020, 16:12
Narimanych,

Visual Basic
1
CreateObject("Scripting.FileSystemObject").CopyFile "E:\MM\SSS.xlsm", "E:\MM\SDDD.xlsm", True
1
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
07.03.2020, 16:21
pashulka,
Thnks….
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.03.2020, 16:21
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru