Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2010, 10:37   #1
vfv
Пользователь
 
Регистрация: 28.07.2009
Сообщений: 54
По умолчанию Резервное копирование папки с файлами xls (Excel 2003)

Мне необходимо резервное копирование папки с файлами xls в другую папку, название которой будет отражать текущее время и дату копирования.
Копирование должно происходить при закрытии любого открытого файла xls в резервируемой папке.
Подскажите,кто знает.
vfv вне форума Ответить с цитированием
Старый 12.03.2010, 11:45   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Тема не имеет отношения к Excel.
Есть специальные программы, выполняющие резервное копирование по команде, или по расписанию.
Есть программы, отслеживающие открытие\закрытие файлов в указанной папке.
Совместив 2 такие программы, вы получите то, что требуется.

Можно, конечно, написать макрос, который будет делать это (макросом можно и диски форматировать при желании), но стоит ли?
EducatedFool вне форума Ответить с цитированием
Старый 12.03.2010, 12:15   #3
Eresiarh
Пользователь
 
Регистрация: 15.01.2010
Сообщений: 31
По умолчанию

Для Windows XP Пуск/Программы/Стандартные/Служебные/Архивация данных жмем:
Далее
Далее
Предоставить возможность выбора объектов архивации
/Выбираем папку с файлами
/Выбираем куда сохраняем
Далее
Дополнительно
Выбираем "Добавочный" или какой вам по душе
Далее
Далее
Далее
Позднее
Установить расписание

Собственно встроено в каждую ОС
Eresiarh вне форума Ответить с цитированием
Старый 12.03.2010, 12:42   #4
vfv
Пользователь
 
Регистрация: 28.07.2009
Сообщений: 54
По умолчанию

Это мне не подходит.
Вот попробовал батником:
код :
copy D:\1 E:\2

D-это раздел диска
E-это флэшка

1-это папка,которую копируют
2-это папку в которую копируют

Можно ли написать макрос для файла Excel,а он находится в папке D:\1,который запустил бы этот батник?
vfv вне форума Ответить с цитированием
Старый 12.03.2010, 12:57   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Батник не нужен - указанную команду можно выпонить прямо из макроса.
Пример см. здесь: http://www.programmersforum.ru/showp...49&postcount=5

Макрос может выглядеть так: (поместите код в модуль ЭтаКнига)
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)    ' перед закрытием файла
    On Error Resume Next
    ' переключаем файл в режим ТОЛЬКО ЧТЕНИЕ, чтобы он мог скопироваться
    ThisWorkbook.ChangeFileAccess xlReadOnly

    ' копируем папку
    CreateObject("WScript.Shell").Run "xcopy C:\XDView D:\LINSN", 0, False

    ' переключаем обратно режим доступа к файлу
    ThisWorkbook.ChangeFileAccess xlReadWrite
End Sub

Последний раз редактировалось EducatedFool; 12.03.2010 в 13:00.
EducatedFool вне форума Ответить с цитированием
Старый 12.03.2010, 13:40   #6
vfv
Пользователь
 
Регистрация: 28.07.2009
Сообщений: 54
По умолчанию

Это как раз то,что я и хотел.
Огромное спасибо!
По ссылке мне не разобраться.Сказывается возраст-53г,да и компьютером я начал заниматься
3 года назад.Особенно заинтересовал Excel VBA.

Подскажите пожалуйста ещё:
1.Можно ли,чтобы копируемая папка копировалась в сжатую 7z
2.Чтобы файлы не заменялись,а добавлялись
vfv вне форума Ответить с цитированием
Старый 12.03.2010, 14:01   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
1.Можно ли,чтобы копируемая папка копировалась в сжатую 7z
7z - вряд ли. По крайней мере, мне не попадался такой макрос.
В ZIP-архив загнать можно, но макрос заметно усложнится.
Но надо ли это? В наше время мегабайт места на жестком диске (да и на флешке тоже) стоит копейки.
Зачем экономить?

Цитата:
2.Чтобы файлы не заменялись,а добавлялись
Как Вы понимаете, поместить в одну папку два файла с одинаковыми именами не удастся.
Поэтому проще всего решить вопрос, создавая каждый раз новую подпапку в папке для архивации.
Это можно сделать кодом из 2 строк:

Код:
Sub test()
    ПапкаДляАрхивации = "D:\Документы\"
    НоваяПапка = ПапкаДляАрхивации & Format(Now, "DD-MM-YYYY__HH-NN-SS")
    On Error Resume Next: MkDir НоваяПапка
End Sub
В результате выполнения этого кода у меня была создана папка D:\Документы\12-03-2010__15-59-25
Сколько бы раз вы не производили архивирование, каждый раз файлы попадут в новую папку.
EducatedFool вне форума Ответить с цитированием
Старый 12.03.2010, 14:22   #8
vfv
Пользователь
 
Регистрация: 28.07.2009
Сообщений: 54
По умолчанию

Теперь не пойму как соединить эти 2 макроса.
Кое,что попробовал, новые папки создаются,но туда ничего не копируется.
vfv вне форума Ответить с цитированием
Старый 12.03.2010, 14:31   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А если так попробовать?

Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)    ' перед закрытием файла
    On Error Resume Next
    ' переключаем файл в режим ТОЛЬКО ЧТЕНИЕ, чтобы он мог скопироваться
    ThisWorkbook.ChangeFileAccess xlReadOnly

    ПапкаДляАрхивации = "D:\Документы\"
    НоваяПапка = ПапкаДляАрхивации & Format(Now, "DD-MM-YYYY__HH-NN-SS")
    On Error Resume Next: MkDir НоваяПапка
    ' путь к новой папке не должен содержать пробелов!

    ' копируем папку
    CreateObject("WScript.Shell").Run "xcopy C:\XDView " & НоваяПапка, 0, False

    ' переключаем обратно режим доступа к файлу
    ThisWorkbook.ChangeFileAccess xlReadWrite
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 12.03.2010, 15:16   #10
vfv
Пользователь
 
Регистрация: 28.07.2009
Сообщений: 54
По умолчанию

Отлично всё работает!
Осталось сжатие копируемой папки с файлами.
так как она будет размером 300мгб.Резервное копирование будет производится 1раз в день,т.е. 30 копий в месяц.
Получается 9ггб без сжатия.Многовато.
Вот упорно рыл и нашёл ваш макрос.Но он не работает.Можно ли его поправить и чтобы сжатие было 7z ?
Ссылка:
http://forum.developing.ru/showthrea...4634#post64634

Sub СозданиеSFXархива()
' имя создаваемого архива будет иметь вид Мой архив 17-Feb-2009.exe
WinRAR_Path = """C:\Program Files\WinRAR\WinRAR.exe"""
WinRAR_Keys = " a -r -sfx -ep -agDD-MMM-YYYY "

FolderPath = "C:\Documents and Settings\Игорь\Рабочий стол\" ' папка с файлами
ArchieveFileName = Chr(34) & FolderPath & "Мой архив .exe" & Chr(34) ' имя и путь создаваемого архива
Mask = Chr(34) & FolderPath & "*.xls" & Chr(34) ' добавляем только файлы Excel
Icon = " -iicon" & Chr(34) & "C:\Program Files\Microsoft Office\OFFICE11\MSN.ICO" & Chr(34) ' иконка

CommandLine = WinRAR_Path & WinRAR_Keys & ArchieveFileName & " " & Mask & Icon
'MsgBox CommandLine
Shell CommandLine
End Sub
vfv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скрытное копирование папки с файлами BanDit Общие вопросы Delphi 36 08.03.2011 21:53
Резервное копирование БД Paradox andirock2112 БД в Delphi 6 19.05.2009 17:35
Прога Резервное копирование Yar Помощь студентам 1 28.05.2008 11:24
Резервное копирование файлов Viteef Софт 0 15.12.2007 08:02