Pavelkq писал(а):Пишу мульку в ворде: разархивировать файл из списка (shell "cmd /c pkunzip -e....") и открыть его. Но разархивация происходит долго, а VBA не ждет завершения. Как преодолеть проблему? Тупую задержку ставить беспонтово.
Видел эту тему в обычном VB, но как ее адаптировать в подпрограмму VBA и чтоб небольшая вышла?
подпрограмму VBA - это типа макрос что-ли...?
А вообще можно так сделать:
- Код: Выделить всё
Private Const INFINITE = &HFFFF
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
Dim i As Long, ProcessID As Long, hProcess As Long
ProcessID = Shell "cmd /c pkunzip -e...."
hProcess = OpenProcess(&H100000, True, ProcessID)
' INFINITE - ждать завершения процеса
' или можно вместо INFINITE указать время задержки в милисек.
i = WaitForSingleObject(pHandle, INFINITE)
А можно и вообще только отдной API функцией ограничиться, заменить WaitForSingleObject циклом с DoEvents:
- Код: Выделить всё
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwAccess As Long, ByVal fInherit As Integer, ByVal hObject As Long) As Long
Dim ProcessID As Long, hProcess As Long
ProcessID = Shell "cmd /c pkunzip -e...."
hProcess = OpenProcess(&H100000, True, ProcessID)
Do while hProcess <> NULL
hProcess = OpenProcess(&H100000, True, ProcessID)
DoEvents
Loop
Главное двигаться не быстрее, чем думает твоя голова.