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应用程序 窗口。

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列表文件

使用上面的代码,您可以只列出文件名,有时,您需要列出其他属性,例如文件大小,文件类型,创建时间,包含文件夹等。 Kutools for Excel 包含有用的功能– 文件名列表,使用此功能,您可以快速列出文件夹及其子文件夹中的所有或特定类型的文件名。

Kutools for Excel : 带有300多个便捷的Excel加载项,可以在30天内免费试用.

安装后 Kutools for Excel,请执行以下步骤:

1。 点击 企业 > 进出口 > 文件名列表,请参见屏幕截图:

2。 在 文件名列表 对话框中,进行以下操作:

A:点击 文件夹子文件夹7中的doc列表文件按钮选择要列出文件名的文件夹;

B:从列表中指定要列出的文件类型 档案类型 部分;

C:从中选择要显示的一个文件大小单位 文件大小单位 部分。

备注:要列出子文件夹中的文件名,请检查 在子目录中包含文件,您还可以检查 包括隐藏的文件和文件夹 根据需要。 如果您检查 创建超链接 选项,它将为每个文件名和文件夹创建超链接。

立即下载并免费试用!

3。 然后点击 OK 按钮,所选文件夹及其子文件夹中包含的所有文件已在新工作表中显示,并带有以下属性。 看截图:

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

单击以了解有关此文件名列表实用程序的更多详细信息。

立即下载和免费试用Excel的Kutools!


Kutools for Excel:具有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保护