2013-11-26 3 views
2

У меня есть лист Excel, содержащий ячейку, которая содержит путь к каталогу, я хочу, чтобы макрос, который ищет каталог и любые подкаталоги, и перечисляет файлы в .txt, с полным путем каждого файла.Список файлов в папке и вложенной папке с файлом пути .txt

В настоящее время я нашел, что похоже, что он должен найти файлы, за исключением того, что путь жестко закодирован, и он ничего не делает с результатами.

Любые идеи, как я могу изменить его в соответствии с моими потребностями?

Sub LoopThroughFiles() 
Dim StrFile As String 
StrFile = Dir("C:\Work\NCL\nCLs\histogram_addition\TestData\Input\RTE\") 
Do While Len(StrFile) > 0 
    Debug.Print StrFile 
    StrFile = Dir 
Loop 
End Sub 
+3

http://stackoverflow.com/questions/9827715/get-list-of- subdirs-in-vba –

+1

Изменить 'Dir (" C: \ Work \ NCL \ nCLs \ histogram_addition \ TestData \ Input \ RTE \ ")' на 'Dir (Range (" A1 "). Значение)' (изменить на правильную cell code. Этот код печатает результаты на панели Immediate в VBE. Вы можете изменить его для создания текстового файла и распечатать каждый путь до новой строки в файле. –

+0

Я новичок в VBA, просто проверил сразу панель и его пустые, любые идеи, почему? – manish449

ответ

8

Вот метод починилась из примеров FileSystemObject() с помощью рекурсивного вызова. Примените сортировку к результатам, если это необходимо. Кроме того, можно фильтровать расширением .txt, используя другие FileSystemObject() методы:

Sub Sample() 
     ShowFolderList ("C:\temp") 
    End Sub 

    Sub ShowFolderList(folderspec) 
     Dim fs, f, f1, fc, s, sFldr 
     Set fs = CreateObject("Scripting.FileSystemObject") 
     Set f = fs.GetFolder(folderspec) 
     Set fc = f.SubFolders 
     For Each f1 In fc 
      If Right(f1, 1) <> "\" Then ShowFolderList f1 & "\" Else ShowFolderList f1 
     Next 
     Set fc = f.Files 
     For Each f1 In fc 
      Debug.Print folderspec & f1.Name 
     Next 
    End Sub 

Запись в файл:

Option Explicit 

    Dim file As Object 
    Dim fs As Object 

    Sub go() 
     Set fs = CreateObject("Scripting.FileSystemObject") 
     Set file = fs.OpenTextFile("C:\temp2\results3.txt", 2, True) ' 2=ForWriting, replace 
     ShowFolderList "C:\temp\" 
     file.Close 
     MsgBox "done" 
    End Sub 

    Sub ShowFolderList(folderspec) 
    On Error GoTo local_err 
     Dim f, f1, fc, s, sFldr 
     Set f = fs.GetFolder(folderspec) 
     Set fc = f.SubFolders 
     For Each f1 In fc 
      If Right(f1, 1) <> "\" Then ShowFolderList f1 & "\" Else ShowFolderList f1 
     Next 
     Set fc = f.Files 
     For Each f1 In fc 
      file.writeline folderspec & f1.Name 
     Next 
    local_exit: 
     Exit Sub 
    local_err: 
     MsgBox Err & " " & Err.Description 
     Resume local_exit 
     Resume 
    End Sub 
+0

Это работает на благодарность. Как мне получить это для печати в текстовый файл – manish449

+0

Стоит изучить, как использовать FileSystemObject(). Вы можете добавить ссылку на Windows Scripting Runtime, чтобы включить intellisense. – rheitzman

+0

Спасибо, мне еще многое предстоит узнать, когда дело доходит до vba, к сожалению, у меня не так много времени для расследования. скрещенные пальцы скоро меняются. Спасибо за помощь – manish449

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