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