Перемещение папки VBA с использованием FSO сохраняет папку в использовании

Я использую приведенный ниже код для циклического перебора файлов .csv в каталоге и их перемещения в новый каталог (strRootDir и strTargetDir - это локальные переменные, которые были инициированы):

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

Где метод FileFolderExists определяется как:

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

Мой вопрос в том, что после завершения этого процесса, если я попытаюсь удалить каталог strTargetDir, я получаю сообщение об ошибке, в котором говорится, что папка используется другой программой.

Как мне этого не допустить?


person GreenyMcDuff    schedule 27.11.2013    source источник


Ответы (1)


Вы видите файл-призрак. У исследователя есть сверхъестественная привычка к упрямству :)

Вот другой сценарий, который иллюстрирует «файл-призрак»

Просто введите команду Dir, чтобы напомнить проводнику, что файл больше не существует после того, как вы переместите файл, и все будет в порядке :)

Ret = Dir(Path_And_FileName_Which_Was_Moved)

Также зачем использовать fso для перемещения файлов? Вот однострочная команда

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

Это также не оставит файл GHOST

person Siddharth Rout    schedule 27.11.2013
comment
Вау! благодаря. Оба метода отлично сработали. Время их обоих и имя file1 как file2 примерно на 50% быстрее. - person GreenyMcDuff; 27.11.2013