Файл не перемещается VBA

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

Есть идеи?

10000