问题:
如上所述,我有一行代码FileCopy String5, String6
,它给出错误53:找不到文件。我已经确定String6发生了错误。我需要另一双眼睛来帮助我找到错误。
我尝试过的事情:
使用Dir函数仔细检查Excel在创建后可以看到copyto目录
因为要复制的文件来自在代码之前解压缩的文件夹,所以添加1秒等待,以防新文件以某种方式未被检测到(基本上现在尝试所有内容)
我愿意接受任何建议。这是我的代码的更新部分,如果有帮助的话,我也很乐意发布整个内容:
'File Manipulation
'Find a file in StrDir1 with String2 extension, "*.dat"
String4 = Dir(StrDir1 & String2)
Do While String4 <> ""
'Save the complete path of the file found
String5 = StrDir1 & String4
For Loop1 = LBound(Array1) To UBound(Array1)
'Array1 has file identifiers in it that identify who the file belongs to for later separation and folder placement
If InStr(String5, Array1(Loop1)) Then
'We found a file with the identifier, save the future complete path of the copied file
String6 = StrDir1 & Array2(Loop1) & String4
'Create the containing folder where the file will be copied if it does not already exist
String10 = vbNullString
On Error Resume Next
'Check if the folder already exists
String10 = Dir(StrDir1 & Array2(Loop1), vbDirectory)
On Error GoTo 0
'If it doesn't exist, create it
If String10 = vbNullString Then
MkDir StrDir1 & Array2(Loop1)
End If
'String8 is the file type, it was determined earlier
If String8 = "997" Then
String7 = "\\(directory)\" & String4
'This works, which makes me think the problem is String6.
Object2.CopyFile String5, String7
'For testing purposes
ThisWorkbook.Sheets(1).Cells(1, 1).Value = String5
ThisWorkbook.Sheets(1).Cells(2, 1).Value = String6
String10 = Dir(StrDir1 & Array2(Loop1), vbDirectory)
'Back to the real code
'When these lines are commented, Error 53, file not found. When uncommented, Error 76, path not found.
' String5 = " & String5 & "
' String6 = " & String6 & "
'Error occurs here
Object2.CopyFile String5, String6
Kill String5
String4 = Dir(StrDir1 & String2)
'code continues
重申一下,错误发生在上面代码的Object2.CopyFile String5, String6
行。
这是错误时的String5和String6,以防它帮助任何人。这些值从Cells 1,1和2,1复制:
String5:\\极长目录\极长文件名.ext
String6:\\极长目录\极长文件名.ext
更新:我切换到fso.copyfile,我也尝试在字符串周围添加引号,以避免包含空格的目录出现任何问题。当我添加引号时,错误更改为错误76,找不到路径。这有助于解决我的代码问题吗?
(我还在我的代码片段中添加了几行,希望能够证明这不是Dir()问题,但是因为我是Dir()的新手,所以Tim仍然是对的。 )
更新2:我认为String6太长了。我正在使用以下代码进行测试,但在我尝试运行文件成功复制文件后,Excel会一直崩溃。我是否需要了解FSO以防止这种情况发生?
Sub M2Pathtester()
Dim String5 As String
Dim String6 As String
Dim Object2 As Object
Set Object2 = CreateObject("scripting.filesystemobject")
String5 = ThisWorkbook.Sheets(1).Cells(1, 1)
String6 = ThisWorkbook.Sheets(1).Cells(2, 1)
Object2.CopyFile String5, String6
End Sub
最终更新 是的,字符串太长了。 Excel仍然使用fso.copyfile方法反复崩溃(成功复制后),但当我恢复为FileCopy时,它运行顺利。
答案 0 :(得分:1)
我没有看到任何明显的原因,您应该收到目标文件的错误53。一些消息来源表明FileCopy可能是古怪的,路径中有空格,但如果是这样的话,那真的应该给出错误52。我发现有人声称他们需要停止在目标文件夹中隐藏已知文件扩展名以避免FileCopy出错,但我不确定我是否会购买该文件。
我确保您在要写入的文件夹中拥有相应的权限,并使用Scripting.FilesystemObject来执行复制 - 它通常更强大:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile String5, String6
答案 1 :(得分:0)
答案是String6超过了最大字符长度。因此,当使用FileCopy或fso.copyfile时收到错误53或错误76时,请注意这是可能的。
注意:由于我对FSO的经验不足,这可能不完全/技术上正确,但我希望如果你被困住,它会告诉你足够让你走上正确的道路。