使用 Excel VBA 递归列出文件和文件夹


出版日期:

更新:


技术文章 > 使用 Excel VBA 递归列出文件和文件夹

2026 状态和安全使用

结论:递归访问每个文件夹,发出您需要的文件,并将每个子文件夹传递回同一过程。添加显式错误处理以及针对结点、符号链接、隐藏文件夹和拒绝访问路径的策略。

你将学到什么

  • FileSystemObject 如何公开文件夹、子文件夹、文件、名称和路径。
  • 递归如何构建完整的树以及为什么深层树或循环树需要保护措施。
  • 如何将结果写入工作表,而无需大规模缓慢的逐单元格操作。

适用人群:正在清点受控 Windows 目录树的 Excel 用户。

2026年位置:该示例反映了作者原始的本地测试。验证目录结构副本上的权限和链接行为,并考虑使用 PowerShell 或用于非常大或安全敏感的树的专用清单工具。

安全注意事项:原始文章中的命令和配置示例尚未在当前生产环境中重新运行。应用之前,请在单独的测试环境中验证支持的版本、备份、访问控制和回滚步骤。

官方主要来源

概述。

本文介绍如何使用 VBA(Excel 宏)递归列出文件和文件夹,涵盖以下任务:

  • 列出目录下所有文件或文件夹的完整路径。
  • 你想对一个文件夹下的文件或文件夹进行循环处理。

目录

  1. 编程方法
  2. 代码描述。
  3. 摘要

1. 编程方法

以下是编程的参考例子。

示例将逻辑定义为 Function,可按原样复制并从 Sub 过程调用。

'Parameter Examples
'## filePath      C:\Users\user\Desktop\test\
'## kind          false:folder, true:file
'## list
Function getFolderOrFile(filePath As String, kind As Boolean, list As Collection) As Collection
 
'delete\
Dim filePathEnd As String
filePathEnd = Right(filePath, 1)
If filePathEnd = "\" Then
  filePath = Left(filePath, Len(filePath) - 1)
End If
 
'Folder existence check
Dim result As String
result = Dir(filePath, vbDirectory)
If result = "" Then
  MsgBox "File does not exist!"
  Exit Function
End If
 
If kind Then
  Dim buf As String
  buf = Dir(filePath & "\*.*")
  Do While buf <> ""
    list.Add filePath & "\" & buf
    buf = Dir()
  Loop
Else
  list.Add filePath
End If
 
Dim folder As Object
With CreateObject("Scripting.FileSystemObject")
  For Each folder In .GetFolder(filePath).SubFolders
    getFolderOrFile folder.Path, kind, list
  Next folder
End With
 
End Function

要使用它,请将以下内容作为参数传递。

  • filePath:目录。 例子。)C:\Users\user\Desktop\test
  • kind:传真,传假。 如果为真,则返回一个文件列表。 如果是false,返回一个文件夹列表。
  • list:该集合用于存储结果。 下面是一个实施的例子。

下面是一个实际函数调用的实现例子。

Sub test()
 
Dim list As Collection
Set list = New Collection
getFolderOrFile "C:\Users\user\Desktop\test", False, list
Dim item As Variant
For Each item In list
  '------TODO------
  ThisWorkbook.Worksheets(1).Cells(1, 1).Value = item
Next
 
End Sub

调用getFolderOrFile将在列表中存储一个文件或一个文件夹列表。 实施例是假的,所以文件夹的列表被存储。

在For语句的 "TODO "部分描述你想做的过程。 ITEM可以被视为一个字符串变量。

参考来源是在Excel中把获得的列表设置为A1的过程。 (这个过程会重复覆盖同一个单元。)

2. 代码描述。

关于如何使用该系统的说明到此为止,接下来是对代码的解释。

细节可以在代码中看到,但关键点在于getFolderOrFile方法中对getFolderOrFile的进一步调用。

在搜索文件夹的过程中,通过调用搜索文件夹的过程,进一步重复这一过程,这是一种搜索所有文件夹的机制。

通过调用自己的方法,只要找到文件夹,它就反复调用自己的方法,搜索所有的文件夹。

3. 摘要

如果你需要帮助了解如何使用VBA(Excel宏)获得文件列表和文件夹列表,包括子文件夹,请参考本节。

■技术文章

查看全部技术文章。


■作者简介

查看作者简介。


■联系我们

就本文内容联系我们。