2015-06-03 3 views
1

У меня есть эта часть кода в ExcellМетод File.Move (путь) занимает слишком много времени

If FSO.fileExists(OldName) Then ' FSO is fileSystemObject 
     Cells(1, 3).Value = "Passed" 
     Set source = FSO.getfile(OldName) 
     source.Move (NewName) 
    end if 

где OldName является Somthing как "C: \ DOC \ file.txt" и NewName это что-то вроде «C : \ DOC \ NewName \ file.txt»

каталог C: \ DOC \ NEWNAME содержит ~ 20 000 TXT файлов и линии source.Move (NewName) занимает около 4 мин для выполнения (размер файла 2kB, компьютер очень старый ...)
Если я использую пустой каталог, код запускается через секунду.

Мне не разрешено использовать другой каталог, и я не могу удалить из него файлы.

Может кто-нибудь объяснить, почему это так долго, и каковы варианты сокращения времени?

ответ

0

Так я до сих пор понятия не имею, почему это занимает так много времени, но я нашел обходное решение.

Я использую этот подход, чтобы скопировать файлы

Shell "cmd.exe /S /C move " & oldName & " " & newName, windowStyle:=vbHide 

это работает невидимая команда консоли, которая перемещает файл. VBA не ждет окончания командной строки и продолжает выполнять другие задачи.

0

вы можете попробовать это

If FSO.fileExists(OldName) Then ' FSO is fileSystemObject 
    Cells(1, 3).Value = "Passed" 
    Set source = FSO.getfile(OldName) 
    Name OldName As NewName 

конец, если

UPDATE

нормально, то вы можете попробовать это:

If Len(Dir(OldName)) = 0 Then 
    MsgBox "File does not exist" 
Else 
    Name OldName As NewName 
End If 
+0

Спасибо за ваш ответ, но время выполнения по-прежнему остается таким же. – PauliusM

+0

cant см., Как это может решить проблему - я уже пытался использовать «Имя OldName As NewName», и он принимает то же время – PauliusM

+0

оператор if изменился, теперь он использует Dir, чтобы проверить, существует ли файл, потому что я думаю, что проблема связана с проверкой файла, а не с его перемещением. –

Смежные вопросы