powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Архивация файлов
11 сообщений из 11, страница 1 из 1
Архивация файлов
    #36478439
Gena108
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, пожалуйста, как заархивировать два файла, для одного файла у меня иструкция есть, но если ее применять второй раз, то предудыщий заархивированный файл удаляется.
Код: plaintext
ans = ShellExecute(Application.hwnd, "open", "C:\Program files\WinRAR\rar.exe", "M -m5 -ep """ & ArcName & """ """ & AFileName1 & """", "", SW_SHOW)
...
Рейтинг: 0 / 0
Архивация файлов
    #36478461
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AFileName1 меняй в цикле.
...
Рейтинг: 0 / 0
Архивация файлов
    #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
Архивация файлов
    #36479177
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gena108,

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

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

Попробуйте связку ShellExecuteEx - WaitForSingleObject
...
Рейтинг: 0 / 0
Архивация файлов
    #36479797
Gena108
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не знаю как эту связку применить.
...
Рейтинг: 0 / 0
Архивация файлов
    #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
Архивация файлов
    #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
Архивация файлов
    #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
Архивация файлов
    #36485374
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gena108,

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

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


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