Metoda Run obiektu WScript.Shell i jej arg. bWaitOnReturn   strona główna:
A po co ten Excel ;-)
 
    Nie wiem czy to się do czegoś przyda ale może.. :-)  
Zadaniem jest uruchomienie jakiejś aplikacji i wstrzymanie działania procedury aż do jej wyłączenia.  
Zadanie takie realizuje się np.: przy pomocy procedury takiej jak poniższa..  
 
 
Option Explicit  
 
Sub ShellRun(strCommand As String, ByRef bErr As Boolean, Optional bWait As Boolean = False)  
    On Error GoTo ShellRun_Error  
 
    '             Run Method (Windows Script Host)  
    '  object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])  
    'http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.85).aspx  
      
    'bWaitOnReturn  
    'Optional. Boolean value indicating whether the _  
     script should wait for the program to finish _  
     executing before continuing to the next statement _  
     in your script. _  
        If set to true, script execution halts until _  
     the program finishes, and Run returns any error _  
     code returned by the program. _  
        If set to false (the default), the Run method _  
     returns immediately after starting the program, _  
     automatically returning 0 (not to be interpreted _  
     as an error code).  
 
    Dim objWshShell As Object  
      
    Set objWshShell = CreateObject("WScript.Shell")  
    objWshShell.Run strCommand, 1, bWait  
 
ShellRun_Exit:  
    Set objWshShell = Nothing  
Exit Sub  
 
ShellRun_Error:  
    bErr = True  
    MsgBox "Unexpected error - " & Err.Number & vbCrLf & vbCrLf & _  
            Err.Description, vbExclamation, "VBAProject - ShellRun"  
    Resume ShellRun_Exit  
End Sub  
 
Omówmy jedynie argumenty..  
   - strCommand - ciąg polecenia jakie ma wykonać Metoda Run; ścieżka do pliku exe itp..  
   - ByRef bErr - który w razie błędu procedury zwróci do procedury wywołującej informację że doszło do błędu  
   - bWait - którym właśnie decydujemy czy procedura ma zaczekać na zakończenie działania wywołanej Aplikacji czy też nie..  
Taki przykład..  
 
Sub Start()  
    Dim bErrFlag As Boolean  
    Const strBATFile As String = "notepad.exe"  
      
    StartFileShell strBATFile, bErrFlag, True  
    If Not bErrFlag Then  
        MsgBox "Wykonane"  
    End If  
End Sub  
 
Sprawdźcie procedurę wywołując z bWait = True, a następnie go pomijając a zrozumiecie różnicę.. :-)