Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Архивация файлов / 11 сообщений из 11, страница 1 из 1
18.02.2010, 18:16
    #36478439
Gena108
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов
Подскажите, пожалуйста, как заархивировать два файла, для одного файла у меня иструкция есть, но если ее применять второй раз, то предудыщий заархивированный файл удаляется.
Код: plaintext
ans = ShellExecute(Application.hwnd, "open", "C:\Program files\WinRAR\rar.exe", "M -m5 -ep """ & ArcName & """ """ & AFileName1 & """", "", SW_SHOW)
...
Рейтинг: 0 / 0
18.02.2010, 18:23
    #36478461
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов
AFileName1 меняй в цикле.
...
Рейтинг: 0 / 0
18.02.2010, 18:44
    #36478511
Gena108
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов
Без разницы в цыкле или просто добавить еще одну инструкцию, не работает вторая инструкция:
Код: plaintext
1.
ans = ShellExecute(Application.hwnd, "open", "C:\Program files\WinRAR\rar.exe", "M -m5 -ep """ & ArcName & """ """ & AFileName1 & """", "", SW_SHOW)
ans = ShellExecute(Application.hwnd, "open", "C:\Program files\WinRAR\rar.exe", "M -m5 -ep """ & ArcName & """ """ & AFileName2 & """", "", SW_SHOW)
...
Рейтинг: 0 / 0
19.02.2010, 09:16
    #36479177
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов
Gena108,

Вы вызываете системный процесс, нужно дождаться его завершения, прежде чем его повторно вызвать.

Другими словами система не успевает отреагировать на "мгновенный" запрос запуска 2х архиваторов т.к. на запуск архиватора требуется больше времени чем на итерацию цикла в VBA.
...
Рейтинг: 0 / 0
19.02.2010, 11:46
    #36479552
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов
Gena108,

Попробуйте связку ShellExecuteEx - WaitForSingleObject
...
Рейтинг: 0 / 0
19.02.2010, 13:01
    #36479797
Gena108
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов
Я не знаю как эту связку применить.
...
Рейтинг: 0 / 0
19.02.2010, 13:20
    #36479859
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
' Декларация API функций и констант
Private Declare Function WaitForSingleObject Lib "KERNEL32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "KERNEL32" (ByVal dwAccess As Long, ByVal fInherit As Integer, ByVal hObject As Long) As Long
Private Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const INFINITE = &HFFFF


Private Sub WaitForProcessToEnd(cmdLine As String, windowstyle As VbAppWinStyle, Optional msWait As Long = INFINITE)
  ' Запускает процесс через Shell и ждет его завершения.
  '[cmdLine]     - коммандная строка, может включать имя файла, параметры, ключи
  '[windowstyle] - стиль запускаемого окна: свернутое, развернутое и т.д
  '[msWait]      - макс. время ожидания
  ' вместо конст.INFINITE можно указать время в миллисек.
  Dim retVal As Long, pID As Long, pHandle As Long
   
  pID = Shell(cmdLine, windowstyle)
  pHandle = OpenProcess(&H100000, True, pID)
  retVal = WaitForSingleObject(pHandle, msWait)
    
End Sub
...
Рейтинг: 0 / 0
19.02.2010, 13:55
    #36479974
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов
Gena108,

а ещё можно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Function IsOpenProcess(ID_PROCc As Double) As Boolean

Dim h As Long
h = OpenProcess(&H1, True, ID_PROCc)
If h <>  0  Then
  CloseHandle h
  IsOpenProcess = True
Else
  IsOpenProcess = False
End If
End Function


юзается так

Код: plaintext
1.
2.
3.
Dim PROCED as Double
PROCED = Shell("C:\Program Files\7-Zip\7zG.exe e " & DPath & "\" & s & " -o" & DPath & " -aoa ",  1 )
While IsOpenProcess(PROCED)
Wend

От варианта SergeySV отличается тем, что можно выполнять параллельные операции (типа таймер времени) пока процесс работает.

тут есть ещё вариант аналогичный SergeySV, но у SergeySV есть фишка с максимальным ожиданием.
...
Рейтинг: 0 / 0
19.02.2010, 16:31
    #36480410
Gena108
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов
Спасибо большое за помошь. Но увы я не понимаю как Ваши примеры подставить в свой.Пробую так, но выпадает ошибка на Shell
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
AFileName1 = R_Folder & "Статистика_" & "" & N(i) & "" & "_" & "" & mydate & "" & ".xlsx"
        AFileName2 = R_Folder & "Статистика_" & "" & N(i) & "" & "_" & "" & mydate & "" & ".xls"
        ArcName = Left(AFileName1, Len(AFileName1) -  4 ) & "rar"
        Dim PROCED As Double
        PROCED = Shell("C:\Program files\WinRAR\rar.exe", "M -m5 -ep """ & ArcName & """ """ & AFileName1 & """",  1 )

        While IsOpenProcess(PROCED)
        Wend
        PROCED = Shell("C:\Program files\WinRAR\rar.exe", "M -m5 -ep """ & ArcName & """ """ & AFileName2 & """",  1 )

        While IsOpenProcess(PROCED)
        Wend
...
Рейтинг: 0 / 0
24.02.2010, 11:22
    #36485374
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов
Gena108,

ну для начала мне не нравится вот эта запятая
"C:\Program files\WinRAR\rar.exe" , "M -m5 -ep """ & ArcName & """ """ & AFileName1 & """"

shell не воспринимает это как одну команду с ключами
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.11.2011, 17:06
    #37538995
natalitvinenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов
Shamanus,преогромнейшее вам спасибо- после двух дней мучений данный вариант, утянутый ву Вас и творчески пеработанный, таки сделал то, что я хотела. Ура.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Архивация файлов / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]