0

Does anyone know how to copy subfolders from one place to another in VB?. I have a Template folder on a network share I want to use to set up the base folder structure on newly created job folders, however, I can't seem to get any copy methods to take just the subfolders and not the parent.

The base (from) template folder is structrued as;

\\server\
..\_templates\
....\input\
......\communications\
......\data\
.....\output\
......\communications\
......\data\
and so on..

I have:

Public Sub CopyFilesFolder2Folder(Foldername As String)

    Dim fso
    
    sfol = "\\server\main_jobs\_Templates\" ' source folder path
    dfol = Foldername ' destination folder path

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set Folder = fso.GetFolder(sfol)

    fso.GetFolder(Folder).Copy dfol
    Set fso = Nothing

This copy's the folder just fine, but, carrys the parent (_Templates) too, so the resulting desitnation is \\newserver\newjob\_Templates\folder1, 2, 3, ect. wher I want it to be \\newserver\newjob\folder1, 2, 3, ect.

Any ideas?, I'm stumped on this.

2
Contributors
12
Replies
13
Views
6 Years
Discussion Span
Last Post by Tommymac501
0

No, this fix throws out a "Folder not found" error. In hovering, it appears as though the source folder in "fso.GetFolder(Folder).Copy dfol" is missing the trailing slash, making it a file, not a folder - causing the error. Still trying to figure it out, but thanks..

0

If I understood right, the problem is that the destination folder does not exists?
Then you should use fso.CreateFolder before copying.

Anyway, instead of using fso.GetFolder(Folder).Copy .. I would prefer the fso.CopyFolder( fromFolder , toFolder, Overwrite)

Hope this helps

0

The folder exists, I create it using "CreateNewFolder", the problem is that it's nested in a certain path structure (Client\Year\JobNumber_name\). The Template folder is what needs to go into the nested Job folder (actually, just the folders inside it). We need to create a consistent folder structure that's common for every job so there is no question as to where anything is for turnover or coverage. "Data" is always in the '"Client\Year\JobNumber_name\Input\Data" folder, Reports are always in the "Client\Year\JobNumber_name\Output\Reports" folder. This is the idea.

As the Project manager creats a new job entry, Access will automatically create that folder structure by using the Index to the Client list to determine the root client folder name, ect.

0

To copy the files and folders inside _templates from \\Server\mainjobs\_templates to the new destination directory you need to iterate through the \\Server\mainjobs\_templates subfolders.

After

Set SourceRootFolder = fso.GetFolder(sfol)

you can loop by subfolder as (untested)

For Each Folder In SourceRootFolder.SubFolders
    fso.GetFolder(Folder).Copy dfol & "\" & Folder.Name
Next

Also if you need to copy the files from the root folder then (also untested)

For Each ExistingFile In SourceRootFolder.Files
    fso.GetFile(ExistingFile).Copy dfol & "\" & ExistingFile.Name
Next

Hope this helps

0

Still erroring out;

dim SourceRootFolder As FileSystemObject

    sfol = "\\SERVER\Maijobs\_Templates\" 
    dfol = Foldername
    
    Set SourceRootFolder = fso.GetFolder(sfol)
    
    For Each Folder In SourceRootFolder.subFolders
        fso.GetFolder(Folder).Copy dfol & "\" & Folder.Name
    Next

Throws a ".subFolders Method or Data Member not found" error.

I feel sooooooo close!.. ugh!

0

No, "SubFolders" doesn't appear on the list of available methods. Perhaps I should be dimesioning SourceRootFolder as something other than a FileSystemObject?

0

The default dim is as object, like in the example on the page I recommended to read:

Function ShowFolderList(folderspec)
   Dim fso, f, f1, s, sf
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set sf = f.SubFolders
   For Each f1 in sf
      s = s & f1.name 
      s = s & "<BR>"
   Next
   ShowFolderList = s
End Function

Hope this helps

Edited by lolafuertes: n/a

0

Actually, I'm getting a '454 Object Required' error on "Set SourceRootFolder = fso.GetFolder(sfol)", thats why I dimme'd 'SourceRootFolder' as a FileSystemObject.

0

Got it figured out. I id reference the page you mentioned, and actually ran the code. When VBA was erroring out, it indicated the variable "SourceRootFolder" was the issue, however, I needed to create fso first. after adding "Set fso = CreateObject("Scripting.FileSystemObject")", it worked like a charm!

THANKS!!!

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.