Search code examples
vbafilemove

Moving files from one folder to another


I need to move a file from one folder to another folder using VBA.

For m = 1 To fnum
    MsgBox " Please Select " & m & "files"
    ffiles(m) = Application.GetOpenFilename
Next m

If Dir(outputfolder) = "" Then
    fso.createfolder (outputfolder)
End If

fso.Movefile ffiles(m), outputfolder  " getting error at this place "

I am getting an error message.

Error message id "Runtime error 438 . Object doesnt support this property "

Solution

  • My favorite way of doing it. Using the SHFileOperation API

    Option Explicit
    
    Private Declare Function SHFileOperation Lib "shell32.dll" _
    Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
    
    Private Const FO_MOVE As Long = &H1
    Private Const FOF_SIMPLEPROGRESS As Long = &H100
    
    Private Type SHFILEOPSTRUCT
        hWnd As Long
        wFunc As Long
        pFrom As String
        pTo As String
        fFlags As Integer
        fAnyOperationsAborted As Long
        hNameMappings As Long
        lpszProgressTitle As Long
    End Type
    
    Sub Sample()
        Dim fileToOpen As Variant
        Dim outputfolder As String
        Dim i As Long
    
        outputfolder = "C:\Temp\"
    
        fileToOpen = Application.GetOpenFilename(MultiSelect:=True)
    
        If IsArray(fileToOpen) Then
            If Dir(outputfolder) = "" Then MkDir outputfolder
    
            For i = LBound(fileToOpen) To UBound(fileToOpen)
                Call VBCopyFolder(fileToOpen(i), outputfolder)
            Next i
        Else
              MsgBox "No files were selected."
        End If
    End Sub
    
    Private Sub VBCopyFolder(ByRef strSource, ByRef strTarget As String)
        Dim op As SHFILEOPSTRUCT
        With op
            .wFunc = FO_MOVE
            .pTo = strTarget
            .pFrom = strSource
            .fFlags = FOF_SIMPLEPROGRESS
        End With
        '~~> Perform operation
        SHFileOperation op
    End Sub