我正在VBA中的一个项目中,我在一个目录中搜索某个日期的文件,这些文件也符合其他条件,所有这些都运行正常。我所坚持的,这应该是一个微不足道的问题,当我尝试使用FileCopy将文件复制到另一个文件夹时,我不断收到路径/文件访问错误。这让我感到困惑,因为我直接从我正在使用的FileItem中提取路径来搜索条件,我是创建源文件夹和目标文件夹的人,并将文件放在源文件夹中。有什么想法吗?
Sub ListFilesInFolder()
Dim counter As Integer
Dim theString1 As String, theString2 As String
theString1 = "ISA*00*"
theString2 = "ISA|00|"
Dim line As String, fileName As String
Dim datestring As String
'datestring = Format(FileItem.DateLastModified, "mm/dd/yyyy")
Dim today As String
today = Format(DateAdd("d", -2, Date), "mm/dd/yyyy")
Dim destinationFolder As String
destinationFolder = "C:\Users\kragan\Desktop\test\folder2"
Dim file As TextStream
Dim FSO As Scripting.FileSystemObject
Set FSO = New Scripting.FileSystemObject
Dim SourceFolder As Scripting.Folder
Set SourceFolder = FSO.GetFolder("C:\Users\kragan\Desktop\test\folder1")
Dim FileItem As Scripting.file
For Each FileItem In SourceFolder.Files
datestring = "10/18/2015"
If (datestring = today) Then
Do While (SourceFolder <> "")
Set file = FSO.OpenTextFile(FileItem)
counter = 0
Do While Not file.AtEndOfLine And counter < 1
line = file.ReadLine
If InStr(1, line, theString1, vbTextCompare) > 0 Or InStr(1, line, theString2, vbTextCompare) > 0 Then
fileName = "C:\Users\kragan\Desktop\test\folder1\" + FSO.GetBaseName(FileItem) + ".AETCLS"
'The line where I get the error:
FileCopy fileName, destinationFolder
file.Close
counter = counter + 1
Exit Do
End If
Loop
Loop
End If
Next FileItem
MsgBox ("done")
End Sub
答案 0 :(得分:2)
您需要指定目标文件夹+目标文件名(而不仅仅是目标文件夹)。
所以这会奏效:
FileCopy fileName, destinationFolder & "\" & FSO.GetBaseName(FileItem) & ".AETCLS"
您可能认为这将像文件管理器应用程序一样工作,其中给目标文件夹足够...... :)但是在编程时,您需要完全按原样指定目标路径,即包括文件名。
我的一位朋友在创建目录newdir1\newdir2\newdir3
时遇到类似错误。尽管他付出了最大的努但解决方案是创建newdir1
,然后可以指定newdir1\newdir2
,最后指定newdir1\newdir2\newdir3
。编程文件操作不能完成文件管理器中经常出现的工作,但必须详细指定所有内容并按基本步骤执行。
答案 1 :(得分:0)
感谢您的帮助。我发现你必须拥有完整的目标路径,包括文件名,即使它没有改变。解决!