Файл не перемещается VBA - PullRequest
0 голосов
/ 15 ноября 2018
Call MOVEDFFILES("C:\TEMP\MAIN FOLDER\INVOICES\COUNTRY\Invoices\" & SEASON & " DF Invoices\", "C:\TEMP\MAIN FOLDER\INVOICES\COUNTRY\Invoices\"  & SEASON & " DF Invoices\Imported\")

Я создал приведенный выше код для вызова приведенного ниже кода и перемещения файлов, если их нет в новой папке, и удаления их в исходной папке, если они есть.однако, хотя я могу использовать имя OldLocation & MyFile как 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 Ответ

0 голосов
/ 15 ноября 2018

Проблема в том, что ваша проверка, существует ли файл в новом месте , неверна.

Самый простой способ проверить это - ввести команду 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
...