Excel 函数Dir()未按例外情况工作:错误代码5:参数或过程调用无效

Excel 函数Dir()未按例外情况工作:错误代码5:参数或过程调用无效,excel,vba,file,pdf,path,Excel,Vba,File,Pdf,Path,我正在尝试设置一个宏,该宏将文件从某个文件夹移动到另一个文件夹,如果该文件已经存在,那么它将显示一个消息框,如果其他文件夹中的文件已经存在于某个文件夹中。问题是 我认为第一个错误是: StrFile=Dir 下面是错误代码:5无效参数或过程调用 这行代码的例外输出是转到下一个文件,以便逐个浏览我的所有.Pdf文件 子MooveFile() 将文件路径设置为字符串 将文件设置为字符串 作为字符串的Dim NomFichier 暗方向为字符串 作为字符串的Dim StrFile 作为对象的Dim F

我正在尝试设置一个宏,该宏将文件从某个文件夹移动到另一个文件夹,如果该文件已经存在,那么它将显示一个消息框,如果其他文件夹中的文件已经存在于某个文件夹中。问题是

我认为第一个错误是:

StrFile=Dir
下面是错误代码:5无效参数或过程调用 这行代码的例外输出是转到下一个文件,以便逐个浏览我的所有.Pdf文件

子MooveFile()
将文件路径设置为字符串
将文件设置为字符串
作为字符串的Dim NomFichier
暗方向为字符串
作为字符串的Dim StrFile
作为对象的Dim FSO
Dim SourceFileName作为字符串,DestinFileName作为字符串
StrFile=Dir(ActiveWorkbook.Path&“\”和“*.PDF”)
当Len(StrFile)>0时执行
方向=拆分(StrFile,“”)(0)
设置FSO=CreateObject(“Scripting.Filesystemobject”)
SourceFileName=ActiveWorkbook.Path&“\”StrFile
设置FoundRange=Sheets(“Path”).Cells.Find(what:=Direction,LookIn:=xlFormulas,lookat:=xlWhole)
如果FoundRange为Nothing,则“如果文件夹存在,则测试如下:正在工作”
出错时继续下一步
MkDir ActiveWorkbook.Path&“\”方向
DestinFileName=ActiveWorkbook.Path&“\”方向&“\”StrFile
FSO.MoveFile源:=源文件名,目标:=目标文件名
Else'如果文件夹存在:正在工作
DestinFileName=ActiveWorkbook.Path&“\”方向&“\”StrFile
如果Dir(SourceFileName)“”则“如果文件存在,则显示消息框:正在工作
选择大小写MsgBox(“le fichier”&SourceFileName&“existe déjávoulez vous le remplacer”,vbAbortRetryIgnore)
案例B中止
'取消操作。
MsgBox“操作已取消”
案例vbRetry
'继续执行Do循环以重试。
FSO.DeleteFile DestinFileName,True
FSO.MoveFile源:=源文件名,目标:=目标文件名
案例vbIgnore
'采取默认操作。
转到下一行
结束选择
其他的
FSO.MoveFile源:=源文件名,目标:=目标文件名
如果结束
'FSO.MoveFile源:=源文件名,目标:=目标文件名
如果结束
下一行:
StrFile=Dir'此行代码不工作:错误代码5:参数或过程调用无效
环鳍束
Application.ScreenUpdating=True
端接头

我错过什么了吗?我已经尝试了
StrFile=Dir()

我不确定在创建文件系统对象时为什么要使用
Dir

虽然(以我的经验)它速度较慢,但它更健壮

首先,不要将其创建为对象。将引用放入Windows。然后编写脚本

Dim FSO As Scripting.FileSystemObject
set FSO= New Scripting.FileSystemObject 
除此之外,它还会给你带来智能感,让生活更轻松

然后,您可以使用检查文件/文件夹

If FSO.FileExists(myFile) Then
If FSO.FolderExists(myFolder) Then
并开始使用集合,例如

Dim fi As Scripting.File
For Each fi In FSO.GetFolder(myFolder).Files
Next    

@JvdV确实如此,此字符串包含文件名。很遗憾,我无法复制此错误:(.这里有一个问题。@JvdV为你做这项工作?因为它在一个文件夹中工作,但这不在另一个文件夹中…我不明白。也许你可以帮我投票我被卡住了。很抱歉我误解了这个问题。我正在试着调试部件
StrFile=Dir(ActiveWorkbook.Path&“\”&“*.PDF”)
oh okay@jvdV错误出现在宏的末尾,可能是因为我使用Dir太多次了吧?。感谢您的时间,顺便问一下,应该返回什么:
FSO.FileExists(myFile)
它是否返回布尔值?是的。如果FSO.FileExists(myFile),您可以使用
如果FSO.FileExists(myFile),那么
或者
如果FSO.FileExists(myFile)=则为True
,具体取决于您的风格偏好。它们完全相同。