VBA FileCopy:找不到文件问题

时间:2015-10-20 21:29:32

标签: vba file-copying

我正在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

2 个答案:

答案 0 :(得分:2)

您需要指定目标文件夹+目标文件名(而不仅仅是目标文件夹)。

所以这会奏效:

 
FileCopy fileName, destinationFolder & "\" & FSO.GetBaseName(FileItem) & ".AETCLS"

您可能认为这将像文件管理器应用程序一样工作,其中给目标文件夹足够...... :)但是在编程时,您需要完全按原样指定目标路径,即包括文件名。

我的一位朋友在创建目录newdir1\newdir2\newdir3时遇到类似错误。尽管他付出了最大的努但解决方案是创建newdir1,然后可以指定newdir1\newdir2,最后指定newdir1\newdir2\newdir3。编程文件操作不能完成文件管理器中经常出现的工作,但必须详细指定所有内容并按基本步骤执行。

答案 1 :(得分:0)

感谢您的帮助。我发现你必须拥有完整的目标路径,包括文件名,即使它没有改变。解决!