功能定位:为什么选宏而不是 Power Query
在 WPS 表格里,“宏”(VBA 兼容引擎)依旧是本地无网场景下最轻量的批量文件名提取方案。Power Query 虽能连文件夹,但 2026 Spring 版在 Linux 与 HarmonyOS NEXT 端仍标记为实验功能,且政企电脑默认关闭外部数据连接器;宏则完全离线,代码可内嵌 .xlsm 文件,便于后续审计与版本留存。
一句话:当你需要可重复、可审计、可离线地把“文件名+修改时间+大小”一次性扫进工作表,宏是最小权限的解决路径。
前置检查:版本、权限与宏开启
1. 版本与路径差异
- Windows:2026 Spring(12.9.3 起)已内置 VBA7.2,开发工具选项卡默认隐藏,需文件 → 选项 → 自定义功能区 → 勾选“开发工具”。
- Linux:社区版需手动安装
wps-office-macro包,否则宏按钮呈灰色;安装后重启即可。 - macOS:宏引擎基于 VBA Lite,不支持 ActiveX,但文件系统遍历仍可用 Dir 函数。
2. 宏安全级别
政企电脑若提示“企业策略已禁用宏”,需让管理员在注册表 HKCU\Software\Kingsoft\Office\6.0\Common\Security 把 VBAWarnings 设为 1;个人电脑可在开发工具 → 宏安全 → 中允许带签名的宏。
最小可运行代码:三步粘贴即用
以下示例仅依赖 Scripting.FileSystemObject(Windows 自带),不引用任何外部库,可一键复现。复制到 开发工具 → VBA 编辑器 → 新建模块即可运行。
Sub ListFileNames()
Dim fso As Object, folder As Object, file As Object
Dim row As Long, path As String
path = InputBox("请输入文件夹完整路径:", "批量提取文件名")
If Right(path, 1) <> "\" Then path = path & "\"
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(path)
row = 2
Cells(1, 1).Resize(1, 4).Value = Array("文件名", "大小(B)", "修改时间", "完整路径")
For Each file In folder.Files
Cells(row, 1).Value = file.Name
Cells(row, 2).Value = file.Size
Cells(row, 3).Value = file.DateLastModified
Cells(row, 4).Value = file.Path
row = row + 1
Next
MsgBox "共写入 " & row - 2 & " 条记录", vbInformation
End Sub
经验性观察:在 10 000 文件量级下,耗时约数十秒,CPU 占用可见提升;若文件夹含子目录,请改用递归版(见下一节)。
递归子目录:把“层级”也写进表
当需要保留相对路径以便后续核对,可在上述代码后加入递归函数 ListSubFolders,并把主循环拆成对文件与文件夹的双重遍历;输出结果新增一列“相对路径”,方便按层级筛选。
fso.GetFolder 会抛出错误 70。建议开启 On Error Resume Next 并在结果表中单列标记“读取失败”,保证可审计性。把结果变成“可刷新”模板
若每周都要重新提取,可将路径硬编码为 ThisWorkbook.CustomProperties("ScanPath"),并在文件 → 信息 → 属性里留一个“扫描路径”自定义属性;随后把宏绑定到形状按钮,一键清空旧结果再写入,实现零人工复制。
进阶用户可把写入区域设为Excel 表对象(Ctrl + T),这样后续再插列、写公式都不会破坏结构化引用,方便对接数据透视表。
云盘场景:WPS 云、OneDrive 与符号链接
1. WPS 云本地缓存
WPS 云文档在 Windows 的默认缓存路径为 C:\Users\<用户名>\WPS Cloud Files\<空间 ID>;经验性观察,该目录已做稀疏文件处理,宏读取到的“大小”为云端完整大小,与本地占用磁盘空间无关,可用于对账。
2. OneDrive 按需文件
若文件夹含“云-only”文件,fso.File.Size 仍能返回完整字节,但首次访问会触发下载,批量遍历可能耗时数分钟。建议提前在资源管理器右键 → 始终保留在此设备,再运行宏,可避免中途卡顿。
合规与数据留存:四步留痕
- 把宏文件保存为 .xlsm,而非 .xlsx,确保代码随文件走;
- 在结果表尾部加扫描时间戳(
Now())与Windows 用户名(Environ("USERNAME")),满足审计追溯; - 若文件清单涉及客户资料,把存放目录的只读权限写进代码注释,提示后续用户勿改;
- 用 WPS 的历史版本功能(文件 → 云备份 → 查看历史)保留每次扫描前的快照,方便回退。
不适用场景清单
- 超过 100 万文件:Dir 递归会耗尽 32 位 VBA 内存,出现“溢出”错误;此时应改用 Python 脚本 + Power Query。
- 实时同步监控:宏只能一次性批量,若需文件变动即时写入,请用系统自带的文件资源管理器日志或第三方实时监控工具。
- 非 Windows 单文件系统:macOS 对 NTFS 外接硬盘仅读,宏无法写入结果表到同一盘符;需先转存到本地 APFS 卷。
常见故障排查表
| 现象 | 最可能原因 | 验证与处置 |
|---|---|---|
| 运行按钮灰色 | 宏被企业策略禁用 | 注册表确认 VBAWarnings=1,或让管理员推送例外策略 |
| 结果表空白 | 路径末尾缺少 \ | 在 InputBox 后加 If Right(path,1)<>"\" Then path=path&"\" |
| 错误 76:路径未找到 | 网络驱动器未映射 | 资源管理器先手动点开对应盘,确保已用同一用户身份挂载 |
| 中文文件名乱码 | 系统区域语言非 UTF-16 | WPS 选项 → 常规与保存 → 勾选“使用 Unicode 作为默认编码” |
最佳实践 5 条(检查表)
- 路径用 InputBox 而非硬编码,防止换电脑后失效;
- 结果表加“扫描批次”GUID(
WorksheetFunction.Text(Rnd(), "0000000000")),方便多轮对比; - 把宏绑定到形状按钮,并写
Application.ScreenUpdating = False,减少刷新闪烁; - 对网络驱动器先
Dir探测,若返回空则提前退出,避免长时间无响应; - 定期用“文件 → 检查文档”一键删除隐藏属性,防止宏里残留旧路径信息。
未来趋势:宏的下一站
经验性观察,WPS 在 2026 路线图中已提到“JS 宏”双引擎预览,未来或可在 Linux 与 HarmonyOS NEXT 上脱离 VBA 依赖;若正式落地,同一套脚本有望跨平台零修改运行。现阶段建议继续沿用 VBA 兼容层,同时把核心逻辑封装成函数,届时只需替换入口即可平滑迁移。
📺 相关视频教程
Excel将每行数据批量生成制式表格 excel技巧 wps



