Perchè non cambi la funzione che determina la fine del processo di decompressione? Io ad esempio uso la segente funzione:
codice:
'Shell per il Backup - programma VB resta in attesa che
'il programma lanciato termini:
    Declare Function OpenProcess Lib "kernel32" _
    (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hprocess As Long, lpExitCode As Long) As Long
    Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Const STILL_ACTIVE = &H103
    Const PROCESS_QUERY_INFORMATION = &H400
codice:
'Funzione per la copia ed il Backup:
Function RikShell(exe As String, Optional WinStyle) As Integer
    
    Dim processid As Long
    Dim hprocess As Long
    Dim exitcode As Long
    Dim parm As Integer

    'Controllo il parametro opzionale finestra:
    Select Case VarType(WinStyle)
        Case vbEmpty, vbNull, vbError
            parm = vbHide
        Case vbLong, vbInteger, vbSingle, vbDouble
            parm = WinStyle
        Case Else
            parm = vbHide
    End Select

    'Prelevo l'ID del processo lanciato:
    processid = Shell(exe, parm)

    'Creo un Handle per quel processo:
    hprocess = OpenProcess(PROCESS_QUERY_INFORMATION, False, processid)
    Do
    'Controlla ripetutamente che termini la copia o il backup:
    Call GetExitCodeProcess(hprocess, exitcode)
    'Lascio libero il sistema di processare le altre applicazioni:
        DoEvents
    Loop While (exitcode = STILL_ACTIVE)

    CloseHandle (hprocess)
End Function
codice:
'Funzione per continuare con il programma  al termine del backup - Modulo Connessione :
        RikShell   "C:\Windows\system32\ntbackup.exe backup " & Chr$(34) & FolOrig & Chr$(34) & " /M copy /V:yes /F " & Chr$(34) & ValoreDir & Chr$(34)
In questo modo il controllo viene restituito al programma solo quando è finito il ciclo di decompressione.
Mi interesserebbe comunque il tuo codice, forse posso migliorare quello esposto.