Copying files from one folder to another using vba

后端 未结 3 489
一个人的身影
一个人的身影 2021-01-26 18:17

There are some similar posts about this topic, I know. However, I have a code which is different than all codes I have seen here (when talking about this subject).

The e

相关标签:
3条回答
  • 2021-01-26 19:10

    For moving all files in a folder:

    Sub MoveFiles()
    
    Dim MyFile As String
    
    MyFile = Dir("C:\AAAA\*.*")
    
    Do Until MyFile = ""
    
    Name "C:\AAAA\" & MyFile As "C:\AAA\" & MyFile
    
    MyFile = Dir
    
    Loop
    
    End Sub
    
    0 讨论(0)
  • 2021-01-26 19:13

    To copy all files and sub-folders recursively, use the following code:

    Public Sub CopyDirectory(ByVal source As String, ByVal destination As String)
        Dim fso, file, folder As Object
        Set fso = CreateObject("Scripting.FileSystemObject")
        'Delete existing folder
        If fso.FolderExists(destination) Then fso.DeleteFolder destination, True
        fso.CreateFolder destination
        For Each file in fso.GetFolder(source).files
            fso.CopyFile file.Path, destination & "\" & file.Name
        Next file
        For Each folder in fso.GetFolder(source).SubFolders
            CopyDirectory folder.Path, destination & "\" & folder.Name
        Next folder
    End Sub
    

    Use as following:

    CopyFile "C:\Path To Source", "C:\Path to destination"
    

    Note that the paths should not include a trailing directory separator (\).

    0 讨论(0)
  • 2021-01-26 19:17

    This is because fso.CopyFile "C:\Users\Desktop\Files\file", "C:\Users\Desktop\Files\Old\file" is not a file... It's just a string to a dummy file from the looks of it.

    If instead the line was

    fso.CopyFile fil.Path, "C:\Users\Desktop\Files\Old\" & fil.name... that might work.

    Updated to add:

    I just attempted the following using (subbing computer username for below) and had success moving everything into a new folder:

    Sub test()
        Dim fso As FileSystemObject
        Dim fsoFiles As Files
        Dim fil As File
    
        Set fso = New FileSystemObject
        Set fils = fso.GetFolder("C:\Users\<MY USERNAME>\Desktop\").Files
    
        For Each fil In fils
            n = fil.Name
            d = fil.DateLastModified
            fso.CopyFile fil.Path, fil.ParentFolder & "\test\" & fil.Name
    
        Next fil
    End Sub
    

    The only difference here is that I used fil.ParentFolder to get my Desktop and then tossed it into a new folder I created on my desktop (prior to running the script) named "test".

    0 讨论(0)
提交回复
热议问题