Rahul
Rahul

Reputation: 11560

How to check until file exist

Is there any way to check until file exists in VBA.

what I am trying to do is, making vba call asynch.

Now after I run

wshShell.Run """" & SFilename & """" & s

I want to check until file exists like this

Wait until fso.fileexists("file")
  Msgbox "file is now available"
End wait!!!

is there any way in vba?

I am using word vba.

Upvotes: 2

Views: 9563

Answers (2)

HackSlash
HackSlash

Reputation: 5812

You need a timeout to avoid an endless loop. This function returns true if it found the file and false if timeout was reached.

Option Explicit

Const timeoutSeconds As Long = 128

Private localFSO As Object
Public Function FSO() As Object
    If localFSO Is Nothing Then Set localFSO = CreateObject("Scripting.FileSystemObject")
    Set FSO = localFSO
End Function

Public Function WaitForFileToExist(ByVal theFileName As String) As Boolean
    Dim timeElapsed As Single
    Dim startTime As Single
    startTime = Timer
    
    Do
        If FSO.FileExists(theFileName) Then
            WaitForFileToExist = True
            Exit Do
        End If

        DoEvents
        Application.Wait Now + TimeValue("0:00:01")
        
        timeElapsed = Timer - startTime
    Loop Until timeElapsed > timeoutSeconds
End Function

Upvotes: 1

gizlmo
gizlmo

Reputation: 1922

You can do it like this:

Do

    If fso.FileExists("file") Then

        Exit Do
    End If

    DoEvents 'Prevents Excel from being unresponsive
    Application.Wait Now + TimeValue("0:00:01") 'wait for one second
Loop

MsgBox "file available", vbOKOnly, ""

Although this is surely not the best method


Instead of using Application.Wait, you can use sleep:

Sleep 1000 '1 Second

but you need to add this to your code to be able to use it:

#If VBA7 Then  
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems  
#Else  
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds as Long) 'For 32 Bit Systems  
#End If 

Upvotes: 2

Related Questions