Excel VBA Macro to Copy File
This page explains about 2 options to do file copy using Vba.
- CopyFile option from FileSystemObject
- VBA.Filecopy
The first one has more options like: Adding wild cards with source file & option to overwrite a file if already exists. Vba built in Filecopy function does not have these flexibility.
Copy File using Excel VBA code Snippet
Here is the Vba code that foes file copy.
It uses the Filesystemobject from Microsoft scripting runtime library for this purpose. It has direct option to copy files.
Syntax & Explanation:
Dim oFso As FileSystemObject oFso.copyfile sSourcePath, sDestinationPath, bOverWriteFile 'SourceFilepath, Destination folder Path (with trailing Slash(\) at end, True or False 'OR 'Use VBA Command VBA.FileCopy sSourcePath, sDestinatonPath
Here is the explanation about the Function:
- Sourcepath: Can be a file name or path with wildcard that match list of files.
- DestinationPath: Can only be a folder.
- OverWrite Flag – Boolean – True/False
CopyFile Implementation:
Sub filecopyVBA(sSourcePath As String, sDestinationPath As String) 'Code from Officetricks 'Late Binding 'Dim oFso as object 'Set oFso = VBA.CreateObject("Scripting.FileSystemObject") 'Early Binding 'Add Reference to Microsoft Scripting Runtime Dim oFso As FileSystemObject, bOverWriteFile As Boolean Dim vFilePathSplit As Variant, sFileName As String Dim sPathSep As String sPathSep = Application.PathSeparator If VBA.Right(VBA.Trim(sDestinationPath), 1) <> sPathSep Then sDestinationPath = sDestinationPath & sPathSep End If 'Before Copying Check if file exists already Set oFso = New FileSystemObject If oFso.FileExists(sSourcePath) Then bOverWriteFile = False 'Check if file already exists vFilePathSplit = VBA.Split(sSourcePath, sPathSep, , vbTextCompare) sFileName = vFilePathSplit(UBound(vFilePathSplit)) sFileName = sDestinationPath & sPathSep & sFileName If oFso.FileExists(sFileName) Then If MsgBox("File with same name exists. Overwrite(Y/N)?", vbYesNo) = vbYes Then 'File Copy - with overwrite option bOverWriteFile = True Else Exit Sub End If End If 'Filesystemobject CopyFile oFso.copyfile sSourcePath, sDestinationPath, bOverWriteFile End If End Sub
In addition to copying file, this code also checks if the file already exists in the folder. If it is already there, then it asks the user response.
External Reference: Microsoft page about the fso copyfile function.