2017-02-15 29 views
0

我一直在嘗試編寫一個宏,該宏將列出我的目錄中每個工作簿的工作表名稱。這些文件存儲在各種文件夾和子文件夾中,所以我希望它能夠將所有內容都提取出來,並且可以從整個輸出中推斷出我需要的信息。這段代碼是我在本網站用戶的幫助下整理的,但我仍然沒有得到期望的結果。有人請幫忙!列出存儲在各種文件夾和子文件夾中的工作簿中的所有工作表 - Excel,VBA

Sub machinegun() 
    FileType = "*.xls*" 
    OutputRow = 2 
Set fso = CreateObject("Scripting.FileSystemObject") 
Set Folder = fso.GetFolder("G:") 
Set Curr_File = (filepath & FileType) 
For Each Subfolder In Folder.Subfolders 
    Do Until Curr_File = "" 
     Set Fldr.wkbk = Workbooks.Open(filepath & Curr_File, False, True) 
     ThisWorkbook.ActiveSheet.Range("A" & OutputRow) = Curr_File 
     ThisWorkbook.ActiveSheet.Range("B" & OutputRow).ClearContents 
     OutputRow = OutputRow + 1 

     For Each Sht In FldrWkbk.Sheets 
      ThisWorkbook.ActiveSheet.Range("B" & OutputRow) = Sht.Name 
      ThisWorkbook.ActiveSheet.Range("A" & OutputRow).ClearContents 
      OutputRow = OutputRow + 1 
     Next Sht 
     FldrWkbk.Close SaveChanges:=False 
     Loop 
Next 
End Sub 
+1

看起來它應該做你需要它做的事情。你能指定你不滿意的是什麼嗎? – Gordon

+0

我想我最初的抱怨是它不會產生任何結果......我有一個版本的代碼可以一次做一個文件夾,但我需要它做近400個,這是不可持續的。 – brianabrownesq

+0

對不起,我讀到你的問題的方式,聽起來並不嚴重。我現在看到你沒有正確地循環瀏覽文件和子文件夾,所以希望Vityata的答案能夠對該部分進行排序。 – Gordon

回答

1

這裏是Loop Through All Subfolders Using VBA的東西,這會爲你工作:

Option Explicit 

Sub LoopThroughFiles() 

    Dim FileSystem As Object 
    Dim HostFolder As String 

    HostFolder = "C:\Users\" 

    Set FileSystem = CreateObject("Scripting.FileSystemObject") 

    DoFolder FileSystem.GetFolder(HostFolder) 

End Sub 


Sub DoFolder(Folder) 

    Dim SubFolder 

    For Each SubFolder In Folder.SubFolders 
     DoFolder SubFolder 
    Next 
    Dim File 
    For Each File In Folder.Files 
     Debug.Print File.name 
    Next 

End Sub 

只要確保你運行LoopThroughFiles()並更改HostFolder到有意義的事。然後在debug.print中使用File.name

相關問題