Lo que se me ocurre es lo siguiente:
Primero, cuando ejecutas con el Shell la aplicación, asígnale el número de la instancia a una variable:
Código:
lNumeroInstancia = Shell(App.Path & "\Aplicacion.exe", vbMinimizedNoFocus)
Después, mediante un Timer que cada cierto tiempo esté pasándole con el número de instancia el enfoque a la aplicación ejecutada con el Shell, y cuando de error será porque ya se cerró dicha instancia:
Código:
Private Sub tmrDescargar_Timer()
On Error GoTo ControlarError
AppActivate lNumeroInstancia, False
GoTo Salir
ControlarError:
'Código para indicar que el programa puede seguir con la ejecución
'del resto del código.
Unload Me
On Error GoTo 0
Salir:
End Sub
Por supuesto que esto estará condicionado a que el usuario no cierre el programa de C antes de que termine de hacer lo que se supone que hace.