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