Call MOVEDFFILES("C:TEMPMAIN FOLDERINVOICESCOUNTRYInvoices" & SEASON & " DF Invoices", "C:TEMPMAIN FOLDERINVOICESCOUNTRYInvoices" & SEASON & " DF InvoicesImported")
Я создал вышеуказанный код, чтобы вызвать приведенный ниже код и переместить файлы, если они не существуют в новой папке, и удалите их в исходной папке, если они это сделают. однако, хотя я могу использовать Name OldLocation & MyFile As NewLocation & MyFile для перемещения файлов, они исчезают при попытке использовать приведенный ниже код. Этот код работает еще там, где для другого пути к файлу единственная разница заключается в использовании * .csv как MyFile, может ли это вызвать проблему?
Private Sub MOVEDFFILES(OldLocation As Variant, NewLocation As Variant)
'Makes the file path if not there
If Dir(NewLocation, vbDirectory) = "" Then
MkDir NewLocation
End If
'Moves the files from one location to another
MyFile = Dir(OldLocation & "*.csv")
Do Until MyFile = ""
If Not NewLocation & MyFile > 0 Then
Name OldLocation & MyFile As NewLocation & MyFile
Else
Kill OldLocation & MyFile
End If
MyFile = Dir
Loop
End Sub
Всего 1 ответ
Проблема в том, что ваша проверка, существует ли файл в новом местоположении , неверна.
Самый простой способ проверить это - выпустить Dir
команду, но это сломает ваш цикл. Вы можете открыть только одну команду Dir
, выдав Dir в цикле, чтобы проверить, существует ли файл в новом местоположении, приведет к тому, что команда MyFile = Dir
не сможет проверить следующий файл в старом местоположении .
Оказывается, что вам вообще не нужно делать чек: просто выполните команду « Name
и « Kill
. Трюк должен игнорировать любые ошибки. Если файл не существует в новом местоположении , Name
переместит его, и Kill
не нужно ничего удалять, потому что файл уже ушел. Если файл уже существует в новом местоположении , Name
будет терпеть неудачу и Kill
будет делать это ...
Итак, это одна из немногих ситуаций, когда можно использовать печально известное On Error Resume Next
:
f = Dir(OldLocation & "*.csv")
Do Until f = ""
On Error Resume Next
Name OldLocation & f As NewLocation & f
Kill OldLocation & f
On Error GoTo 0
f = Dir
Loop