Если Set TestWorkbook = Workbooks("export.csv")
приводит к Nothing
, то следующий код будет зацикливаться вечно
OpenLoop:
If TestWorkbook Is Nothing Then
Application.Wait DateAdd("s", 1, Now)
GoTo OpenLoop
Else
End If
, потому что вы никогда не пытаетесь Set TestWorkbook
к чему-либо снова.
Так что лучше использоватьчто-то вроде этого:
Dim TestWorkbook As Workbook
Set TestWorkbook = Nothing
Do
On Error Resume Next
Set TestWorkbook = Workbooks("export.csv")
On Error Goto 0 'always re-activate error reporting!!!
' you can add a wait here but it's not necessarily needed.
DoEvents 'keep Excel responsive (in case of endless loop)
Loop While TestWorkbook Is Nothing
Обратите внимание, что этот цикл будет работать до тех пор, пока не будет открыт export.csv
.Если он никогда не откроется, он будет работать вечно.Поэтому, вероятно, вы хотите вставить критерий времени, чтобы отменить цикл через некоторое время, например.1 минута.
Обратите внимание, что Application.Wait DateAdd("s", 1, Now)
необязательно.Цикл просто попытается найти книгу до тех пор, пока она там не будет, даже без ожидания.