Note: The other languages of the website are Google-translated. Back to English

如何將文件夾和子文件夾中的所有文件列出到工作表中?

您是否曾經嘗試將文件夾中的所有文件名列出到工作表中,包括其子文件夾中的文件? 實際上,我們沒有直接方法可以在Excel中列出文件夾及其子文件夾中的文件名,但是,今天,我將介紹一些快速的技巧來解決此問題。

用VBA代碼列出文件夾和子文件夾中的所有文件名

使用Kutools for Excel快速輕鬆地列出文件夾和子文件夾中的所有文件名


通常,Excel沒有內置功能來處理此任務,但是,您可以應用以下VBA代碼來解決此問題。

1。 激活一個新的工作表,它將列出文件名。

2。 按住 ALT + F11 鍵,然後打開 Microsoft Visual Basic for Applications 窗口。

3。 點擊 插入 > 模塊,然後將以下代碼粘貼到 模塊窗口.

VBA代碼:列出文件夾和子文件夾中的所有文件名

Sub MainList()
'Updateby Extendoffice
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems(1)
Call ListFilesInFolder(xDir, True)
End Sub
Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject As Object
Dim xFolder As Object
Dim xSubFolder As Object
Dim xFile As Object
Dim rowIndex As Long
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
For Each xFile In xFolder.Files
  Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
  rowIndex = rowIndex + 1
Next xFile
If xIsSubfolders Then
  For Each xSubFolder In xFolder.SubFolders
    ListFilesInFolder xSubFolder.Path, True
  Next xSubFolder
End If
Set xFile = Nothing
Set xFolder = Nothing
Set xFileSystemObject = Nothing
End Sub
Function GetFileOwner(ByVal xPath As String, ByVal xName As String)
Dim xFolder As Object
Dim xFolderItem As Object
Dim xShell As Object
xName = StrConv(xName, vbUnicode)
xPath = StrConv(xPath, vbUnicode)
Set xShell = CreateObject("Shell.Application")
Set xFolder = xShell.Namespace(StrConv(xPath, vbFromUnicode))
If Not xFolder Is Nothing Then
  Set xFolderItem = xFolder.ParseName(StrConv(xName, vbFromUnicode))
End If
If Not xFolderItem Is Nothing Then
  GetFileOwner = xFolder.GetDetailsOf(xFolderItem, 8)
Else
  GetFileOwner = ""
End If
Set xShell = Nothing
Set xFolder = Nothing
Set xFolderItem = Nothing
End Function

4。 將代碼粘貼到模塊中後,按 F5 運行此代碼的關鍵,以及 彈出對話框,選擇 主目錄 宏名稱,然後單擊 按鈕,請參見屏幕截圖:

文件夾子文件夾1中的doc列表文件

5。 而在中 瀏覽 窗口,請選擇要列出所有文件名(包括子文件夾)的文件夾,請參見屏幕截圖:

文件夾子文件夾2中的doc列表文件

6。 指定文件夾後,然後單擊 OK 按鈕,並且該文件夾及其子文件夾中的所有文件名已從單元格A2列出到當前工作表中,請參見屏幕截圖:

文件夾子文件夾3中的doc列表文件
1
文件夾子文件夾4中的doc列表文件

使用上面的代碼,您可以只列出文件名,有時,您需要列出其他屬性,例如文件大小,文件類型,創建時間,包含文件夾等。 Excel的Kutools 包含有用的功能– 文件名列表,使用此功能,您可以快速列出文件夾及其子文件夾中的所有或特定類型的文件名。

Excel的Kutools : 帶有300多個便捷的Excel加載項,可以在30天內免費試用.

安裝後 Excel的Kutools,請執行以下步驟:

1。 點擊 企業 > 進出口 > 文件名列表,請參見屏幕截圖:

2。 在 文件名列表 對話框中,進行以下操作:

A:點擊 文件夾子文件夾7中的doc列表文件按鈕選擇要列出文件名的文件夾;

B:從列表中指定要列出的文件類型 檔案類型 部分;

C:從中選擇要顯示的一種文件大小單位 文件大小單位 部分。

備註:要列出子文件夾中的文件名,請檢查 在子目錄中包含文件,您也可以檢查 包括隱藏的文件和文件夾 根據需要。 如果您檢查 創建超鏈接 選項,它將為每個文件名和文件夾創建超鏈接。

立即下載並免費試用!

3。 然後點擊 OK 按鈕,所選文件夾及其子文件夾中包含的所有文件已在新工作表中顯示,並具有以下屬性。 看截圖:

文件夾子文件夾8中的doc列表文件

單擊以了解有關此文件名列表實用程序的更多詳細信息。

立即下載和免費試用Excel的Kutools!


Excel的Kutools:具有300多個方便的Excel加載項,可以在30天內免費試用,沒有任何限制。 立即下載並免費試用!

最佳辦公效率工具

Kutools for Excel 解決了你的大部分問題,並將你的生產力提高了 80%

  • 重用: 快速插入 複雜的公式,圖表 以及您以前使用過的任何東西; 加密單元 帶密碼 創建郵件列表 並發送電子郵件...
  • 超級公式欄 (輕鬆編輯多行文本和公式); 閱讀版式 (輕鬆讀取和編輯大量單元格); 粘貼到過濾範圍...
  • 合併單元格/行/列 不會丟失數據; 拆分單元格內容; 合併重複的行/列...防止細胞重複; 比較範圍...
  • 選擇重複或唯一 行; 選擇空白行 (所有單元格都是空的); 超級查找和模糊查找 在許多工作簿中; 隨機選擇...
  • 確切的副本 多個單元格,無需更改公式參考; 自動創建參考 到多張紙; 插入項目符號,複選框等...
  • 提取文字,添加文本,按位置刪除, 刪除空間; 創建和打印分頁小計; 在單元格內容和註釋之間轉換...
  • 超級濾鏡 (將過濾方案保存並應用於其他工作表); 高級排序 按月/週/日,頻率及更多; 特殊過濾器 用粗體,斜體...
  • 結合工作簿和工作表; 根據關鍵列合併表; 將數據分割成多個工作表; 批量轉換xls,xlsx和PDF...
  • 超過 300 項強大的功能. 支持 Office / Excel 2007-2021 和 365。支持所有語言。 在您的企業或組織中輕鬆部署。 完整功能 30 天免費試用。 60 天退款保證。
kte選項卡201905

Office選項卡為Office帶來了選項卡式界面,使您的工作更加輕鬆

  • 在Word,Excel,PowerPoint中啟用選項卡式編輯和閱讀,發布者,Access,Visio和Project。
  • 在同一窗口的新選項卡中而不是在新窗口中打開並創建多個文檔。
  • 將您的工作效率提高 50%,每天為您減少數百次鼠標點擊!
officetab底部
按評論排序
留言 (20)
還沒有評分。 成為第一位評論!
網站主持人對此評論進行了最小化
好文章謝謝:D
網站主持人對此評論進行了最小化
親愛的,感謝這個美妙的實用程序.....!!! 阿尼庫馬爾
網站主持人對此評論進行了最小化
如何使此查詢工作以從 B2 單元格而不是 A2 中列出文件名?
網站主持人對此評論進行了最小化
嗨,薩蒂什,
以下代碼可以幫助您將文件名放入您選擇的任何單元格,請嘗試:

子主列表()
在錯誤恢復下一頁
Set xRg = Application.InputBox("請選擇要放置文件名的單元格:", "KuTools For Excel", Selection.Address, , , , , 8)
如果 xRg 什麼都不是,則退出 Sub
設置 xRg = xRg(1)
設置文件夾 = Application.FileDialog(msoFileDialogFolderPicker)
If Folder.Show <> -1 Then Exit Sub
xDir = Folder.SelectedItems(1)
調用 ListFilesInFolder(xRg, xDir, True)
END SUB
Sub ListFilesInFolder(ByVal xRg 作為範圍,ByVal xFolderName 作為字符串,ByVal xIsSubfolders 作為布爾值)
將 xFileSystemObject 調暗為對象
將 xFolder 調暗為對象
將 xSubFolder 調暗為對象
將 xFile 調暗為對象
暗淡 rowIndex As Long
設置 xFileSystemObject = CreateObject("Scripting.FileSystemObject")
設置 xFolder = xFileSystemObject.GetFolder(xFolderName)
行索引 = 1
對於 xFolder.Files 中的每個 xFile
xRg.Formula = xFile.Name
設置 xRg = xRg.Offset(rowIndex)
行索引 = 1
下一個 xFile
如果 xIsSubfolders 則
對於 xFolder.SubFolders 中的每個 xSubFolder
ListFilesInFolder xRg,xSubFolder.Path,真
下一個 xSubFolder
如果結束
設置 xFile = 無
設置 xFolder = 無
設置 xFileSystemObject = 無
END SUB
網站主持人對此評論進行了最小化
偉大的!!! 喜歡,謝謝
網站主持人對此評論進行了最小化
不確定..但它是否考慮長文件夾。 我寫了一個類似的代碼,它在文件夾/文件路徑超過 256 個字符的地方失敗了? 請問有什麼想法嗎?
網站主持人對此評論進行了最小化
非常感謝您的有用文章!
如何自動更新列表並發現更改?
網站主持人對此評論進行了最小化
這幫助我轉換我的代碼以獲得遞歸調用,但我想知道你使用對象的方式。 我更喜歡將我的對象定義為它們本來的樣子,無論是工作簿、工作表還是文件系統對象。 (例如,將 wbDest 調暗為 excel.workbook,將 wsDest 調暗為 excel.worksheet。這樣我就不必擔心活動工作表是什麼。

我還想知道.show - if.show <>-1 的使用,並且不禁感到如果改為使用if.show = false,人們會更容易理解。

在寫到目的地方面,我覺得使用單元格和公式似乎還有很長的路要走

所以在我的代碼中,例如,
wsDest.Range("B" & CurRow) = fil.name
(CurRow = 當前行)

我不是在批評,只是想知道您是否出於個人喜好以外的任何原因這樣做。 - 總是願意學習


但除此之外,感謝您的幫助
網站主持人對此評論進行了最小化
感謝您提供的這段代碼,它幫助我完成了一項工作,我現在可以將這些結果導入 Access 以進行進一步的轉換。感謝它。
網站主持人對此評論進行了最小化
不使用上述代碼中的子“GetFileOwner()”。
網站主持人對此評論進行了最小化
你好,跳繩,
上面的代碼在我的 Excel 中運行良好,你用的是哪個 Excel 版本的?
網站主持人對此評論進行了最小化
Extremamente 優雅 este código!
網站主持人對此評論進行了最小化
參數 ByVal xIsSubfolders As Boolean 的用途是什麼?
網站主持人對此評論進行了最小化
我的 VBA 說未定義變量文件夾。 有誰知道這是為什麼?
網站主持人對此評論進行了最小化
對 VBA 來說真的很新。 我如何使用上面的代碼,但在其中內置了文件路徑,所以我不必每次都搜索它?
網站主持人對此評論進行了最小化
嘿,所以如果我必須從整個列表中提取一個擴展名,我應該在哪裡進行更改?
網站主持人對此評論進行了最小化
它也適用於MAC嗎?
網站主持人對此評論進行了最小化
我已經修改了您的代碼,使其循環使用並不斷重新運行文件夾對話框,直到您按下 Cancel.Unfornatually 它會產生一些errors.1。 如果子文件夾成為選定的文件夾中涉及然後選擇的下一個文件夾成為數字 order.2。 如果子文件夾涉及所選文件夾,則必鬚根據添加的文件夾數量重複並重複取消按鈕。
代碼:
子主列表()
'更新通過 Extendoffice
設置文件夾 = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = 文件夾.SelectedItems(1)
調用 ListFilesInFolder(xDir, True)
End SubSub ListFilesInFolder(ByVal xFolderName 作為字符串,ByVal xIsSubfolders 作為布爾值)
將 xFileSystemObject 調暗為對象
將 xFolder 調暗為對象
將 xSubFolder 調暗為對象
將 xFile 調暗為對象
暗淡 rowIndex As Long
設置 xFileSystemObject = CreateObject("Scripting.FileSystemObject")
設置 xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
對於 xFolder.Files 中的每個 xFile
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
行索引 = 行索引 + 1
下一個 xFile
如果 xIsSubfolders 則
對於 xFolder.SubFolders 中的每個 xSubFolder
ListFilesInFolder xSubFolder.Path, True
下一個 xSubFolder
如果結束
設置 xFile = 無
設置 xFolder = 無
設置 xFileSystemObject = 無
END SUB

任何想法嗎?
網站主持人對此評論進行了最小化
對不起...我給你錯誤的代碼(下),這是我修改的代碼..
代碼:
子主列表()
在錯誤恢復下一頁
將 xFileSystemObject 調暗為對象
將 xFolder 調暗為對象
將 xSubFolder 調暗為對象
將 xFile 調暗為對象
暗淡 rowIndex As Long
暗淡的答案作為變體
答案 = 假
使用 Application.FileDialog(msoFileDialogFolderPicker)
.Title = "選擇一個文件夾"
.AllowMultiSelect = 假
設置文件夾 = Application.FileDialog(msoFileDialogFolderPicker)
如果 folder.Show = -1 那麼
xDir = 文件夾.SelectedItems(1)
其他
退出小組
如果結束
結束

調用 ListFilesInFolder(xDir, True)
END SUB

Sub ListFilesInFolder(ByVal xFolderName 作為字符串,ByVal xIsSubfolders 作為布爾值)
設置 xFileSystemObject = CreateObject("Scripting.FileSystemObject")
設置 xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1

' 在工作表中添加一個空格,然後是文件夾名稱
行索引 = 行索引 + 1
使用 Application.ActiveSheet.Cells(rowIndex, 1)
.Value = xFolder.Name
字體大小= 12
.Font.FontStyle = "粗斜體"
結束
行索引 = 行索引 + 1

對於 xFolder.Files 中的每個 xFile
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
行索引 = 行索引 + 1
下一個 xFile
如果 xIsSubfolders 則
對於 xFolder.SubFolders 中的每個 xSubFolder
ListFilesInFolder xSubFolder.Path, True
下一個 xSubFolder
行索引 = 行索引 + 1
如果結束

設置 xFile = 無
設置 xFolder = 無
設置 xFileSystemObject = 無

調用主列表
END SUB


網站主持人對此評論進行了最小化
不錯的作品,正是我想要創造的。 但這要好 1000%。
這裡還沒有評論
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

版權所有©2009 - 萬維網。extendoffice.com。 | 版權所有。 供電 ExtendOffice。 |
Microsoft和Office徽標是Microsoft Corporation在美國和/或其他國家的商標或註冊商標。
受Sectigo SSL保護