2013-11-27 2 views
3

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

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» Я получаю сообщение об ошибке сказав, что папка используется другой программой.

Как остановить это?

ответ

1

Что вы видите, это Ghost File. Исследователь имеет странную привычку быть упрямой :)

Вот another scenario, который иллюстрирует «Ghost File»

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

Ret = Dir(Path_And_FileName_Which_Was_Moved) 

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

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

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

+0

Wow! Благодарю. Оба метода отлично работали. Запустил их оба и файл Name1, поскольку файл2 быстрее на 50%. – GreenyMcDuff