Страницы: 1
RSS
архивация в определенную папку
 
Здравствуйте! пересмотрела, перепробовала кучу информации , но никак не получается решить проблему.
Нужно создать макрос архивации папки, и соответственно потом розархивации с последующей заменой существующих файлов.
ПапкаДляАрхивации = "ThisWorkbook.Path"
Папкасохранения архива -" ThisWorkbook.Path\приложения\архивы"
название архива -  "ThisWorkbook.Path & Format(Now, DD-MM-YYYY)"
Помогите пожалуйста!
Вот этот код, который я пыталась применить,  не работает
Код
Option Explicit
Const sWinRarAppPath As String = "C:\Program Files\WinRAR\WinRAR.exe"

Sub архивация()
 If FolderToRAR("ThisWorkbook.Path") Then
        MsgBox "Папка успешно заархивирована!"
    End If
End Sub 

Function FolderToRAR(sPath As String)
    Dim sArhiveName As String
    Dim sWinRarApp As String
    sPath = ThisWorkbook.Path
    sWinRarApp = sWinRarAppPath & " A -ep "
    sArhiveName = sPath & Format(Now, "DD - MM - YYYY") & ".rar"
    FolderToRAR = Shell(sWinRarApp & " """ & sArhiveName & """ """ & sPath \ приложения \ архивы & """ ", vbHide)
End Function
 
Цитата
ALANA написал: If FolderToRAR("ThisWorkbook.Path") Then
здесь ошибка - без кавычек надо [по синтаксису, а по логике - объяснения под кодом]
код отсюда
Код
Option Explicit
Const sWinRarAppPath As String = "C:\Program Files\WinRAR\WinRAR.exe"

Function FolderToRAR(sPath As String)
    Dim sArhiveName As String
    Dim sWinRarApp As String
    sWinRarApp = sWinRarAppPath & " A -ep "
    sArhiveName = sPath & ".rar"
    'добавляем двойные кавычки, что позволит нам работать с именем файла и путём, которые содержат пробелы.
    'без кавычек пробелы недопустимы
    FolderToRAR = Shell(sWinRarApp & " """ & sArhiveName & """ """ & sPath & """ ", vbHide)
End Function
Sub архивация()
 If FolderToRAR(ThisWorkbook.Path) Then
        MsgBox "Папка успешно заархивирована!"
    End If
End Sub
НО ругается на то, что вы пытаетесь заархивировать Thisworkbook, которая у вас открыта и из которой запускаете код... пытаясь архивировать Thisworkbook.Path папку...
поместите файл с макросом в др место, правильно расставьте переменные и архивируйте стороннюю папку, а не саму себя... проблем быть не должно... указывая конкретный адрес - кавычки нужны
Изменено: JeyCi - 23.03.2017 16:51:06
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Все легко и понятно, только не понятно как и куда вставить папку сохранения архива -" ThisWorkbook.Path\приложения\архивы"  :( исправила код, сохраняя  не Thisworkbook, теперь не ругается а сохраняет, но что сохраняет... куда сохраняет.. где искать... я понятия не имею.. и как теперь запихнуть в тот же архив файл с макросом архивации.... :(

вот на это теперь не ругается, но куда сохраняю - не знаю
Код
Option Explicit
Const sWinRarAppPath As String = "C:\Program Files\WinRAR\WinRAR.exe"
 
Function FolderToRAR(sPath As String)
    Dim sArhiveName As String
    Dim sWinRarApp As String
    sWinRarApp = sWinRarAppPath & " A -ep "
    sArhiveName = sPath & Format(Now, "DD - MM - YYYY") & ".rar"
    'добавляем двойные кавычки, что позволит нам работать с именем файла и путём, которые содержат пробелы.
    'без кавычек пробелы недопустимы
    FolderToRAR = Shell(sWinRarApp & " """ & sArhiveName & """ """ & sPath & "\приложения\" & "\архивы\", vbHide)
End Function 

Sub архивация()
 If FolderToRAR(ThisWorkbook.Path & "\приложения") Then
        MsgBox "Папка успешно заархивирована!"
    End If
End Sub
Изменено: ALANA - 23.03.2017 19:18:36
 
Цитата
ALANA написал: куда вставить папку сохранения архива -" ThisWorkbook.Path\приложения\архивы"
почему сюда не вставляете?
Цитата
ALANA написал: If FolderToRAR(ThisWorkbook.Path & "\приложения\архивы") Then
по сути эта строка означает - Если Функция(которая делает архивацию) выполнена, то... (ваш код - мне кажется проверка криво может проходить)
Функция Shell даёт значение типа integer. которое наследуется Функцией FolderToRAR... по последней вы делаете проверку (хотя я бы использовала булеву переменную для такой проверки)...
Изменено: JeyCi - 23.03.2017 20:13:26
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
просто поймите, что вы передаёте в Функцию - по сути: это то, что в скобках... и как вы потом используете эту переменную по коду функции...  ;) ... по-хорошему: ещё и что вы оттуда возвращаете в основную процедуру...
а имена ваших папок и какая где я не знаю... призываю понять логику передачи переменных между процедурой и функцией
Изменено: JeyCi - 23.03.2017 20:14:54
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
так оно пишет что заархивировано, а открываю папку - нет ничего.. никакого архива
 
подчеркнула, что бросается в глаза по синтаксису... но не могу понять вашу проблему с папкой... у меня отрабатывал код #2
p.s. правильно передавайте и используйте параметр пути sPath...
Изменено: JeyCi - 23.03.2017 20:17:48
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Код
sPath & "\приложения\" & "\архивы\"
зачем два слеша после папки "приложения"?
Цитата
ALANA написал:
название архива -  "ThisWorkbook.Path & Format(Now, DD-MM-YYYY)"
почему название архива - это не одно название, а целый путь к папке?
Вы лучше напишите куда надо сохранить и по каким условиям - а мы уже поможем сделать рабочий код. Сейчас сложно сказать что-то вменяемое.
Изменено: The_Prist - 23.03.2017 20:39:23
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Папка Для Архивации = "ThisWorkbook.Path"
Папка куда сохранить -" ThisWorkbook.Path\приложения\архивы"
название архива -  "архив & Format(Now, DD-MM-YYYY)"

честное слово, голова уже кругом... уже какие только варианты не пробовала...

если нельзя сохранить ту же папку в которой файл с макросом, то другой вариант -
Папка Для Архивации = "ThisWorkbook.Path\приложения"
Папка куда сохранить -" ThisWorkbook.Path\архив"
название архива -  "архив & Format(Now, DD-MM-YYYY)"
Изменено: ALANA - 23.03.2017 20:55:33
 
Цитата
ALANA написал: Папка Для Архивации = "ThisWorkbook.Path"
я вам уже писала об этом - ошибку выдаст! - если у вас открыт файл (в ЭтойПапке), который хотите заархивировать(с ЭтойПапкой) - так работает WinRAR!... поместите файл на один уровень выше - рядом с папкой, которую хотите архивировать, рядом получите архив указанной папки...
а уже куда его (архив) переместить - это уже другие(!) строки далее по коду... ориентируясь сюда - Объект FileSystemObject
Изменено: JeyCi - 23.03.2017 20:57:18
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
код теперь срабатывает, и кидает архив рядом с файлом макросом, как Вы и говорили... А как сделать чтобы он не рядом кидал, а в определенную папку?
например вот в эту - Папка куда сохранить -" ThisWorkbook.Path\архив".. эта папка рядом с файлом с макросом.
т.е. рядом с файлом-макросом 2 папки. одну архивируем, а во вторую сохраняем.
архивируем -
ThisWorkbook.Path & "\приложения"
а сохраняем в ThisWorkbook.Path\архив.
как в макросе указать путь, куда конкретно нужно сохранить архив?
Код
Option Explicit
Const sWinRarAppPath As String = "C:\Program Files\WinRAR\WinRAR.exe"
 
Function FolderToRAR(sPath As String)
    Dim sArhiveName As String
    Dim sWinRarApp As String
    sWinRarApp = sWinRarAppPath & " A -ep -ag[DD.MM.YYYY] "
    sArhiveName = sPath & ".rar"
    
    'добавляем двойные кавычки, что позволит нам работать с именем файла и путём, которые содержат пробелы.
    'без кавычек пробелы недопустимы
    FolderToRAR = Shell(sWinRarApp & " """ & sArhiveName & """ """ & sPath & """ ", vbHide)
End Function
Sub архивация()
 If FolderToRAR(ThisWorkbook.Path & "\приложения") Then
        MsgBox "Папка успешно заархивирована!"
    End If
End Sub
 
Цитата
ALANA написал: как в макросе указать путь, куда конкретно нужно сохранить архив?
это уже не смешно
Цитата
JeyCi написал: ориентируясь сюда -  Объект FileSystemObject
линк в #10
мне кажется, вы не читаете мои ответы... и у меня нет времени повторять одно и то же... разберитесь один раз - и исчезнут вопросы навсегда... я не вижу, как вы применяете ответ и что у вас не получается... я вне темы с таким вашим подходом
p.s. если хотите макрос под ключ - раздел Работа
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
я читаю Ваши ответы, но я не спец в макросах, и обучаюсь им в процессе создания одного или другого. Я поняла что после создания архива его нужно переместить, а как правильно указать путь к этому архиву, если он только создан, и в имени я выставила и время кроме даты.? Т.е. имя архива каждый раз будет новое.
и после перемещения его нужно будет удалить с временной папки..
Код
Option Explicit
Const sWinRarAppPath As String = "C:\Program Files\WinRAR\WinRAR.exe"

 
Function FolderToRAR(sPath As String)
    Dim sArhiveName As String
    Dim sWinRarApp As String
    sWinRarApp = sWinRarAppPath & " A -ep -ag[DD.MM.YYYY.HH.MM] "
    sArhiveName = sPath & ".rar"
    FolderToRAR = Shell(sWinRarApp & " """ & sArhiveName & """ """ & sPath & """ ", vbHide)
    
End Function
Sub архивация()
 If FolderToRAR(ThisWorkbook.Path & "\приложения") Then
    End If
  Dim FSO As Object
 Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFile "ThisWorkbook.Path & " * " & .rar", "ThisWorkbook.Path & архив", 0
FSO.DeleteFile "ThisWorkbook.Path & " * " & .rar", 0
MsgBox "Папка успешно заархивирована!"
End Sub
Изменено: ALANA - 25.03.2017 00:34:52
 
Цитата
ALANA написал: и обучаюсь им в процессе создания одного или другого.
именно поэтому надо писать, смотреть на отработку, делать выводы, корректировать и т.д. - и применять ответы помогающих... кажется, что вы спрашиваете быстрее, чем пробуете разобраться... это не последовательно  ;) [в коде последовательность логических шагов тоже важна]
там Move - переместить (не обязательно Copy и Delete)
Код
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile("C:\autoexec.bat") 'что
File.Move "D:\" 'куда
там всё это написано... зачем просить кого-то переписывать...
Цитата
ALANA написал: а как правильно указать путь к этому архиву, если он только создан... , и в имени я выставила и время кроме даты.?
если обучаетесь, как пишите, то там целый раздел 5. Объект File - выбирайте атрибут, который вам больше всего подходит DateLastModified... я больше всё равно не напишу чем та статья [об имеющичся возможностях], пока вы не начнёте применять то, что там написано... выстраивая по коду свою последовательность логических шагов... успехов
P.S. 1 нюанс в том, что вы написали Кодом - я вам в этом посте отразила  8) как только вы начали писать сами...  
Изменено: JeyCi - 25.03.2017 18:21:57
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
ALANA написал:
Т.е. имя архива каждый раз будет новое.
сомнительно. Этого ничего не произойдет, пока не начнете читать и пробовать осознанно, а не пихать в разные места разные значения.
Имя архива в изначальном коде задается здесь:
Цитата
ALANA написал:
sArhiveName = sPath & ".rar"
Зачем Вы постоянно что-то пишите в sPath, вместо sArhiveName? Ведь даже по названию видно - именно это создаваемый архив, а не sPath. Он даже по коду имеет на конце расширение ".rar". Или это настолько незаметно?
Вот примерно то, как нужно. Правда, не совсем ясно как должна называть архивируемая папка - тоже "приложения"?
Код
Option Explicit
Const sWinRarAppPath As String = "C:\Program Files\WinRAR\WinRAR.exe"
  
Function FolderToRAR(sPath As String,sArhivePath As String)
    Dim sArhiveName As String
    Dim sWinRarApp As String
    sWinRarApp = sWinRarAppPath & " A -ep -ag "
    sArhiveName = sArhivePath & "приложения.rar"
     
    'добавляем двойные кавычки, что позволит нам работать с именем файла и путём, которые содержат пробелы.
    'без кавычек пробелы недопустимы
    FolderToRAR = Shell(sWinRarApp & " """ & sArhiveName & """ """ & sPath & """ ", vbHide)
End Function
Sub архивация()
 If FolderToRAR(ThisWorkbook.Path & "\приложения", ThisWorkbook.Path & "\архив") Then
        MsgBox "Папка успешно заархивирована!"
    End If
End Sub
Сразу говорю - проверял на работоспособность. Но общий смысл именно такой.
Изменено: The_Prist - 25.03.2017 19:31:23
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
девушка хочет так...
Цитата
ALANA написал: sWinRarApp = sWinRarAppPath & " A -ep -ag[DD.MM.YYYY.HH.MM] "
1) хотя проще по коду задать переменную времени, поменять свойство архива Name на Name и свой довесок времени И эту же Name с довеском времени использовать, как имя файла для перемещения в др папку
2)определить переменную времени и перемещая просто её использовать для DateCreated - НЕстыковка: можно разойтись в секунду и попасть не в ту минуту - будет ошибка
3) DateLastModified... пробовать ввернуть (или см.примеры на форуме)... я этого делать не буду... [поскольку мне больше нравится №1]
... алгоритм, который ALANA выберет, как самый оптимальный по своей задаче, - ей виднее - ждём её последовательность шагов... (хотя по теме ветки вроде бы уже исчерпывающе)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Страницы: 1
Наверх