When managing projects I use a few different off-the-shelf products. But, it always seems there is some task I need to do that can’t be done efficiently with these tools so I make sure to include MS Excel (Office 365) in my suite of project management utilities. VBA macros within Excel give me the power to complete any custom tasks I require.
I needed to copy a set of folders (an entire recursive tree) to a new location. VBA does not natively include this feature. I searched the web for solutions but it seemed all were either out-of-date (non functional) or simply incomplete (never worked!). So, I thought I’d share my solution built on the VBA scripting.filesystemobject. Hopefully it will help others. Here it is …
Public Sub TestCopyFiles() ' Call the recursive copy operation CopyFiles "c:\temp\a", "c:\temp\b" End Sub Public Sub CopyFiles(ByVal strPath As String, ByVal strTarget As String, Optional ByVal basePath As String, Optional ByVal baseTarget As String) If basePath = "" Then basePath = strPath If baseTarget = "" Then baseTarget = strTarget Set FSO = CreateObject("scripting.filesystemobject") ' First loop through files in this folder For Each nextFile In FSO.getfolder(strPath).Files fullTargetPath = strTarget + "\" + nextFile.Name mkdir (strTarget) ' Copy one file FileInFromFolder.Copy fullTargetPath Next ' Next loop through folders in this folder For Each nextFolder In FSO.getfolder(strPath).SubFolders nextStrTarget = baseTarget + Right(nextFolder, Len(nextFolder) - Len(basePath)) mkdir (nextStrTarget) CopyFiles nextFolder.Path, nextStrTarget, basePath, baseTarget Next End Sub Private Sub mkdir(folder As String) ' Create a folder if it doesn't exist Set FSO = CreateObject("scripting.filesystemobject") On Error Resume Next FSO.CreateFolder (folder) On Error GoTo 0 End Sub