2012-04-24 4 views
3

Я перебираю набор каталогов с помощью объекта файловой системы, и я хочу указать дополнительный каталог для прокрутки. Например, я в настоящее время:Укажите дополнительный каталог для циклического перехода через Excel/VBA

Sub test() 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objFolder = objFSO.GetFolder(Directory) 
    Set colSubfolders = objFolder.Subfolders 
    For Each objSubfolder In colSubfolders 
     ' take some action 
    End For 
End Sub 

Но я хочу, чтобы указать дополнительную папку для перебрать, таких как:

colSubfolders = colSubfolders + "additionalpath" 
For Each objSubfolder In colSubfolders .... 

В качестве альтернативы, можно указать несколько объектов в команде петлевой , такие как:

For Each objSubfolder in colSubfolders, "additionalpath" 
+0

Вы могли бы просто сделать 2-й отдельный цикл. И если вы хотите, чтобы второй цикл был списком папок, создайте массив строк и перейдем к этому массиву. – Marc

ответ

3

Простейшее способ вырваться код, который перечисляет каталоги и код, который «принимает какое-то действие» и завернуть его в вызове, повторяет то, что вам нужно;

Sub foo() 
    enumDirs "c:\temp\", "c:\music", "c:\as many as you like ..." 
End Sub 

Sub enumDirs(ParamArray strPaths() As Variant) 
    Dim i As Long 
    For i = 0 To UBound(strPaths) 
     enumDir CStr(strPaths(i)) 
    Next 
End Sub 

Sub enumDir(strPath As String) 
    Dim objFolder As Object, colSubfolders As Object, objSubfolder As Object 
    Set objFolder = CreateObject("Scripting.FileSystemObject").GetFolder(strPath) 
    Set colSubfolders = objFolder.Subfolders 
    For Each objSubfolder In colSubfolders 
     TakeSomeAction strPath, objSubfolder.Name 
    Next 
End Sub 

sub TakeSomeAction(strRoot As String, strFoundPath As String) 
    Debug.Print ">"; strRoot & ", " & strFoundPath 
End sub 
+0

Спасибо за подсказку - должен был подумать о завершении действия. – mike

Смежные вопросы