2016-11-23 1 views
1

경로에서 모든 폴더와 해당 하위 폴더를 반복하는 솔루션을 만든 다음 조건에 따라 파일을 이동합니다.특정 폴더 목록 및 해당 하위 폴더를 반복합니다. VBA 매크로

Sub Move_Files_To_Folder() 

Dim Fso As Object, objFolder As Object, objSubFolder As Object 
Dim FromPath As String 
Dim FileInFolder As Object 

FromPath = "C:\Reports\" 
Set Fso = CreateObject("Scripting.filesystemobject") 
Set objFolder = Fso.GetFolder(FromPath) 

For Each objSubFolder In objFolder.subfolders 
    For Each FileInFolder In objSubFolder.Files 

     If InStr(1, FileInFolder.name, ".xlsx") Or InStr(1, FileInFolder.name, ".zip") Then 
      FileInFolder.Move (objSubFolder.Path & "\2016\" & MonthName(Month(FileInFolder.DateCreated)) & "\") 
     End If 

    Next FileInFolder 
Next objSubFolder 

End Sub 

잘 작동하지만 내 경로 및 모든 하위 폴더의 특정 폴더를 통해 매크로를 루프로 조정하고 싶습니다.

따라서 For Each objSubFolder In objFolder.subfolders 대신 루프를 통해 내 경로 아래 폴더 이름을 포함하는 배열 목록을 만들고 싶습니다. 요약 그래서이

FoldersName = Array("Shipment", "Backlog", "Released", "Unreleased") 
For Each objSubFolder In objFolder.FoldersName 
For Each FileInFolder In objSubFolder.Files 
'rest of my code 
Next FileInFolder 
Next objSubFolder 

같은

뭔가, 내 솔루션 내 길 아래에있는 모든 폴더와 하위 폴더를 통해 루프 난 내 경로 아래 폴더와 모든 하위 폴더의 목록에 조정하려는.

나는이 array을 작성하여 For Each에 추가하려고 시도했지만 매번 그 행에서 오류가 발생했습니다. 어떤 제안이라도 정확하게 쓰는 방법을 알려주세요. 고맙습니다.

답변

1

언제든지 배열을 반복하면서 매번 objFolder에 대한 새 경로를 만듭니다. 이 작동합니다 :

Sub Move_Files_To_Folder() 

Dim Fso As Object, objFolder As Object, objSubFolder As Object 
Dim FromPath As String 
Dim FileInFolder As Object, i as integer 

FoldersName = Array("Shipment", "Backlog", "Released", "Unreleased") 
FromPath = "C:\Reports\" 
Set Fso = CreateObject("Scripting.filesystemobject") 

for i = 1 to ubound(FoldersName) 

    Set objFolder = Fso.GetFolder(FromPath & FoldersName(i) & "\") 

    For Each objSubFolder In objFolder.subfolders 
    For Each FileInFolder In objSubFolder.Files 

     If InStr(1, FileInFolder.name, ".xlsx") Or InStr(1, FileInFolder.name, ".zip") Then 
      FileInFolder.Move (objSubFolder.Path & "\2016\" & MonthName(Month(FileInFolder.DateCreated)) & "\") 
     End If 

    Next FileInFolder 
Next objSubFolder 
next 

End Sub 
1

당신은 Dictionary 객체 (스크립트 라이브러리)을 사용하고 각 하위 폴더 이름

Dim dic As Object 
Set dic = CreateObject("Scripting.dictionary") 
For Each word In Array("Shipment", "Backlog", "Released", "Unreleased") 
    dic.Add word, word 
Next 

For Each objSubFolder In objFolder.SubFolders 
    If dic.contains(objSubFolder.Name) Then 
    'etc etc.. 
을 위해 그것을 찾아 볼 수있다
관련 문제