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