Резервное копирование excel vba
В этой статье я хотел бы рассказать как средствами VBA переименовать, переместить или скопировать файл. В принципе методы переименования, перемещения и копирования, так сказать, встроены в VBA. Это значит что можно без вызова сторонних объектов переименовать, переместить или копировать любой файл. Все это делается при помощи всего двух команд: FileCopy и Name [Исходный файл] As [Новый файл] . Притом команда FileCopy выполняет только копирование, а Name [Исходный файл] As [Новый файл] - как переименование, так и перемещение. Разница лишь в том, что при переименовании мы указываем только новое имя файла, а при перемещении - другую директорию(папку), в которую следует переместить файл. Плюс рассмотрим пример удаления файла.
Так же разберем методы копирования, перемещения, переименования и удаления файлов и папок через библиотеку FileSystemObject (FSO).
Работа с файлами встроенными командами VBA
Работа с файлами через объект FileSystemObject (FSO)
Работа с папками через объект FileSystemObject (FSO)
Во всех примерах работы с файлами встроенными функциями будет присутствовать проверка на наличие файла по указанному пути. Делать это будем при помощи встроенной функции Dir([PathName],[Attributes]) .
PathName - указывается полный путь к файлу
Attributes - указывается признак свойств файла. Вообще их несколько(скрытый, архивный и т.п.), но нас для наших задач будет интересовать пока только один: 16(vbDirectory). Он отвечает за проверку папок и файлов без специальных свойств(т.е. не архивные, не скрытые и т.д.). Хотя по сути его можно вообще не указывать, и тогда будет по умолчанию применен атрибут 0(vbNormal) - проверка файлов без определенных свойств. Ни в том ни в другом случае ошибкой это не будет.
Как видно ничего сложного.
Так же можно проделать те же операции с файлами при помощи объекта FileSystemObject. Строк кода несколько больше и выполняться операции будут медленнее(хотя вряд ли это будет заметно на примере одного файла). Однако есть существенный плюс - при помощи FileSystemObject можно корректно производить операции с файлами и папками на сетевом диске. Хотя та же Dir(sFileName, 16) часто выдает ошибку при работе с сетевыми дисками.
Прежде всего следует, я думаю, пояснить что за зверь такой - FileSystemObject.
FileSystemObject (FSO) - содержится в библиотеке типов Scripting, расположенной в файле библиотеки scrrun.dll. Объектная модель FSO дает возможность создавать, изменять, перемещать и удалять папки и файлы, собирать о них различную информацию: имена, атрибуты, даты создания или изменения и т.д. Чтобы работать с FSO необходимо создать переменную со ссылкой на объект библиотеки. Сделать это можно двумя способами: через ранее связывание и позднее. Я не буду сейчас вдаваться в подробности этих методов - тема довольно обширная и я опишу её в другой статье.
Ранее связывание: для начала необходимо подключить библиотеку Microsoft Scripting Runtime. Делается это в редакторе VBA: References-находите там Microsoft Scripting Runtime и подключаете. Объявлять переменную FSO при раннем связывании следует так:
Dim objFSO As New FileSystemObject
Плюсы раннего связывания: с помощью Object Browser можно просмотреть список объектов, свойств, методов, событий и констант, включенных в FSO. Но есть значительный минус: если планируется использовать программу на нескольких компьютерах, то есть большая вероятность получить ошибку(читать подробнее).
Позднее связывание: ничего нигде не надо подключать, а просто используем метод CreateObject(именно этот способ используется мной в примерах ниже). Методы таким образом просмотреть не получится, но зато работать будет без проблем на любых компьютерах без дополнительных действий.
Хочу обратить внимание, что при переименовании файла через FileSystemObject необходимо указать только имя нового файла - путь указывать не надо. Иначе получите ошибку.
Точно так же можно перемещать, копировать и удалять целые папки:
FSO, конечно, способен на большее - но цель данной статьи была показать основные операции с папками и файлами как стандартными методами, так и более продвинутыми.
Спасибо за помощь!
Не могли бы Вы еще помочь?
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"
"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
При открытии книги она будет сохранятся с текущей датой и временем. Вроде все. :)
Покеда!
В данной статье я постараюсь описать и показать, как можно средствами Visual Basic for Applications создать архив и извлечь данные из архива(иными словами архивировать и разархивировать файлы).
Архивация встроенными средствами Windows(в ZIP):
АРХИВАЦИЯ ЧЕРЕЗ WinRAR
В принципе, все очень даже просто. В функция для архивации и извлечения используется архиватор WinRAR, т.к. он является самым распространенным и есть почти на каждом ПК. Процедура CallRARFunction показывает как можно вызвать функции работы с WinRAR-ом. Остальные функции выполняют непосредственно всю "грязную" работу. Я специально решил привести пример с процедурой вызова и отдельными функциями. Чтобы при необходимости можно было функции записать, а вызов выполнять уже где угодно.
Первое обязательное условие для вызова всех функций - необходимо объявить константу с путем к исполняемому файлу архиватора WinRAR:
Option Explicit Const sWinRarAppPath As String = "C:\Program Files\WinRAR\WinRAR.exe"
Данные две строки помещаются в самый верх модуля, в котором будут описаны функции работы с архивами. Указывается полный путь к файлу WinRAR.exe. В строке выше указан путь, по которому WinRAR устанавливается по умолчанию. Однако если WinRAR установлен в другую папку - необходимо указать её. Например: "C:\Обязательные программы\WinRAR\WinRAR.exe"
ОБЩАЯ ПРОЦЕДУРА ВЫЗОВА ФУНКЦИЙ АРХИВАЦИИ/РАЗАРХИВАЦИИ
АРХИВАЦИЯ ПАПКИ - WinRAR
АРХИВАЦИЯ ФАЙЛА - WinRAR
ИЗВЛЕЧЕНИЕ ИЗ АРХИВА ПАПКИ/ФАЙЛА - WinRAR
Ничего сложного - функции делают одно - вызывают посредством объекта Shell архиватор WinRAR, передавая ему указанные параметры. Для большинства задач функции вполне подойдут без каких-либо изменений. Если лень разбираться - можно просто последовательно скопировать ВСЕ коды данной статьи и вставить их в стандартный модуль.
А для тех, кто хочет углубиться и поэкспериментировать - можно почитать дальше и узнать какие можно применить команды и ключи для более гибкого использования WinRAR вместе с VBA.
Синтаксис передачи параметров WinRAR:
WinRAR [команда] -[ключ1] -[ключN] [архив] [файлы…] [@файл-список…] [путь для извлечения\]
ОПИСАНИЕ ПАРАМЕТРОВ WinRAR
После этого для архивирования достаточно будет выполнить команду:
winrar a backup @backup.lst
В одну строку можно передать сразу несколько команд и ключей. Главное, чтобы порядок их не противоречил синтаксису передачи параметров. Сначала необходимые команды, далее ключи и т.д. Например, в функции FileToRAR я использую команду и два параметра - " A -ep -df " . Если все перевести в одну строку, заменив все переменные значениями, то получится такая строка:
Shell("C:\Program Files\WinRAR\WinRAR.exe A -ep -df ""C:\Temp\Test.rar "" ""C:\Temp\Test.xls"" ", vbHide)
Попробуем прочитать строку:
WinRAR должен поместить в архив файл C:\Temp\Test.xls , имя создаваемого архива - C:\Temp\Test.rar . После успешной архивации исходный файл C:\Temp\Test.xls будет удален(ключ -df). Пути в именах не отображаются(ключ -ep ).
Команду я записал с большой буквы для визуального разделения, но этого не требуется, ключи и команды не чувствительны к регистру. Ниже я привожу таблицы с перечислением и расшифровкой всех команд и функций, доступных в WinRAR. Так же их всегда можно посмотреть в справке самого WinRAR.
ТАБЛИЦА КОМАНД WinRAR
Команда | Описание |
---|---|
A | Добавить файлы в архив |
C | Добавить архивный комментарий |
CH | Изменить параметры архива |
CV | Преобразовать архивы |
CW | Записать в файл комментарий архива |
D | Удалить файлы из архива |
E | Извлечь файлы из архива, игнорируя пути |
F | Освежить имеющиеся файлы в архиве |
I | Найти строку в архивах |
K | Заблокировать архив |
M | Переместить файлы и папки в архив |
R | Восстановить повреждённый архив |
RC | Воссоздать недостающие тома |
RN | Переименовать файлы в архиве |
RR[N] | Добавить информацию для восстановления |
RV[N] | Создать тома для восстановления |
S[имя] | Преобразовать архив в самораспаковывающийся |
S- | Удалить SFX-модуль |
T | Протестировать файлы в архиве |
U | Обновить файлы в архиве |
X | Извлечь файлы из архива с полными путями |
ТАБЛИЦА КЛЮЧЕЙ WinRAR
Чуть подробнее стоит остановиться на ключах к WinRAR. Их использование значительно расширяет возможности архивирования и дальнейшей обработки файлов. Для чего они нужны и как применить? Очень просто. Если взглянуть на функции, приведенные выше, то можно увидеть пару примеров использования ключей и команд.
Ниже приведена полная таблица ключей и их описание:
ТАБЛИЦА ПАРАМЕТРОВ ОКНА ДЛЯ Shell
И таблица параметров и их значений для команды Shell, через которую осуществляется вызов архиватора:
Параметр | Значение параметра |
---|---|
vbNormalFocus | Будет показан ход выполнения архивации |
vbHide | Окно архиватора будет скрыто |
vbMinimizedFocus | Окно архиватора будет свернуто |
vbMinimizedNoFocus | Окно архиватора будет свернуто, а окно вызвавшей программы активировано |
vbMaximizedFocus | Окно архиватора будет раскрыто на весь экран и активировано |
АРХИВАЦИЯ ВСТРОЕННЫМИ СРЕДСТВАМИ Windows(в ZIP):
ОСНОВНАЯ ПРОЦЕДУРА СОЗДАНИЯ ПУСТОГО ZIP-АРХИВА
Данная процедура создает пустой ZIP-архив, в который далее и помещаются необходимые файлы. Эту процедуру необходимо обязательно копировать вместе с процедурами создания ZIP-архивов, приведенными ниже(Zip_File_Or_Files, Zip_All_Files_in_Folder, Zip_ActiveWorkbook).
АРХИВАЦИЯ ОДНОГО УКАЗАННОГО ФАЙЛА
Вызывается функция следующим образом:
Sub ToRarExample() Call ZIPOneFile("C:\Documents\Архив\Test.zip", "C:\Test.xls") End Sub
При этом используя данную функцию можно поместить в один архив более одного файла, просто изменяя полный путь с файлом, который надо заархивировать. Может пригодиться в случае, если требуется создать архив не из заранее созданных в папке файлов, а добавлять их по одному на лету.
Нужно сделать резервную копию БД Access из Excel-я
Help! Нужно сделать резервную копию БД Access из Excel-я, т.е. скопировать базу из рабочего.
Как создать полную резервную копию системы CentOC 6.3
Всем привет ! Подскажите пожалуйта как мне сделать полную копию всей системы CentOS 6.3 ? Дело в.
Lenovo IdeaPad U310. Как создать резервную USB копию?
Добрый день. Купил новый указанный ноутбук с предустановленным Виндоус 7 ХОМЕ премиум в комплекте.
Подскажите, как создать образ/резервную копию уже установленной ОС с программами или без программ, драйверами и т.д.?
Здравствуйте. Подскажите, как создать образ/резервную копию уже установленной ОС с программами или.
Но, если я правильно понимаю,
в этом случае копируется открытый файл -
не будет из-за этого проблем?
Всегда ли корректно он копируется?
Добавлено через 6 минут
могу только добавить, что я этим не пользовался, но, думаю, работать будет, проверьте, может и вопросы отпадут.
на пробу создал файл Книга1.xls на диске d:\
и написал код:
когда эта книга открыта код выдаёт ошибку
Run-time error '70': Permission denied
когда закрыта - копируется.
думаю, это говорит о том, что скопировать
открытую книгу таким способом не удастся
viper-x, был уверен, что должно пройти, чего бы вдруг блокировать копирование, вот перемещение или удаление согласен. Недоработки экселя, но с этим приходится жить. Приду домой, посмотрю.
Добавлено через 2 часа 39 минут
viper-x, возможен такой вариант, не знаю будет ли он выглядеть лучше вашего, вам решать. Создаем файл-запускалку, который копирует ваш основной файл (он пока не открыт) через FileCopy, в следующей строке этого файла вызов вашего основного файла, а в основном файле в модуле ЭтаКнига в процедуре WorkBook_Open стоит закрытие запускалки.
Добавлено через 11 минут
Запускалку можно сделать как скрипт, тогда и закрывать её не нужно
Читайте также: