Search code examples
vbaexcel-2007filesystemobject

VBA moving folder using FSO keeps folder in use


I am using the below code to cycle through '.csv' files in a directory and move them to a new directory (strRootDir and strTargetDir are local variables that have been initiated):

Dim objFile As file
Dim objFSO As FileSystemObject:     Set objFSO = New FileSystemObject
Dim objFolder As Folder:            Set objFolder = objFSO.GetFolder(strRootDir)

For Each objFile In objFolder.Files

    If InStr(1, objFile.Name, ".csv") Then

        FileFolderExists strTargetDir, True
        objFile.Move (strTargetDir)

    End If

Next objFile

Set objFile = Nothing
Set objFolder = Nothing
Set objFSO = Nothing

Where the method 'FileFolderExists' is defined as:

Public Sub FileFolderExists(strFullPath As String, bMkDir As Boolean)
    Dim bExists As Boolean
    If Not Dir(strFullPath, vbDirectory) = vbNullString Then bExists = True
    If Not bExists And bMkDir Then MkDir strFullPath
End Sub

My question is that once this process has completed, if I try to delete the directory 'strTargetDir' I get an error message saying the folder is in use by another program.

How do I stop this from happening?


Solution

  • What you see is a Ghost File. The explorer has an uncanny habit of being stubborn :)

    Here is another scenario which illustrates the "Ghost File"

    Just issue a Dir command to remind explorer that the file no longer exists after you move the file and every thing will be ok :)

    Ret = Dir(Path_And_FileName_Which_Was_Moved)
    

    Also why use fso for moving files? Here is a one line command

    Name "C:\Path1\File1.Ext" As "C:\Path2\File2.Ext"
    

    This will also not leave a GHOST File