Io faccio qualche cosa del genere
Dim Adesso As Single
Adesso = Timer
Do
While Timer - Adesso < 0.1 : DoEvents : End While
Loop While Dir(NomeFile) = ""


In questo modo il DoEvents permette di tenere scarico il programma durante il ciclo con il quale avevi effettuato lo sleep, e al tempo stesso il dir viene fatto una volta ogni decimo di secondo.

Se la dir occupa troppo tempo lostesso e non vuoi allungare l'intervallo a mezzo secondo o giù di lì, prova a vedere se il file è presente utilizzando la funzione FileExists della libreria Microsoft Scripting Runtime