Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
文件不移动VBA_Vba_File_Ms Access - Fatal编程技术网

文件不移动VBA

文件不移动VBA,vba,file,ms-access,Vba,File,Ms Access,我创建了上面的代码来调用下面的代码并移动新文件夹中不存在的文件,如果存在,则删除原始文件夹中的文件。然而,虽然我可以使用名称OldLocation&MyFile作为NewLocation&MyFile来移动文件,但当尝试使用下面的代码时,它们会消失。此代码适用于其他情况,对于不同的文件路径,唯一的区别是使用*.csv作为MyFile,这会导致问题吗 Call MOVEDFFILES("C:\TEMP\MAIN FOLDER\INVOICES\COUNTRY\Invoices\" & SE

我创建了上面的代码来调用下面的代码并移动新文件夹中不存在的文件,如果存在,则删除原始文件夹中的文件。然而,虽然我可以使用名称OldLocation&MyFile作为NewLocation&MyFile来移动文件,但当尝试使用下面的代码时,它们会消失。此代码适用于其他情况,对于不同的文件路径,唯一的区别是使用*.csv作为MyFile,这会导致问题吗

Call MOVEDFFILES("C:\TEMP\MAIN FOLDER\INVOICES\COUNTRY\Invoices\" & SEASON & " DF Invoices\", "C:\TEMP\MAIN FOLDER\INVOICES\COUNTRY\Invoices\"  & SEASON & " DF Invoices\Imported\")

问题在于,检查文件是否存在于新位置是错误的

检查它的最简单方法是发出
Dir
-命令,但这会中断循环。您只能打开一个
Dir
命令,在循环中发出Dir以检查文件是否存在于新位置将导致命令
MyFile=Dir
无法检查旧位置中的下一个文件

事实证明,您根本不需要进行检查:只需同时发出
Name
Kill
命令。诀窍是忽略任何错误。如果文件不存在于新位置,则
名称将移动它,并且
终止
不必删除任何内容,因为文件已不存在。。如果文件已存在于新位置,
名称
将失败,
终止
将完成其工作

因此,这是使用臭名昭著的下一次错误恢复时的
的极少数情况之一:

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

检查
如果不是NewLocation&MyFile>0,则
无法工作。您正在将(连接的)字符串与数字进行比较!托马斯:你让我的早晨过得很好——它工作得很好!我对编码还是相当陌生,所以我尝试了一些简单的选项,你在那里给我写了一些漂亮的代码:)我自己也尝试了错误恢复下一个进程,但我没有完全掌握它是如何工作的,并使整个数据库崩溃了。。。。打开错误转到0部分显然很重要!通常情况下,您不应在错误恢复下使用
-除非(罕见的)特定情况下,您知道语句可能会发出错误,并且您将自己处理(例如,请参阅)。但是您应该始终在该语句之后立即发出错误转到0的
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