功能定位:为什么选宏而不是 Power Query

在 WPS 表格里,“宏”(VBA 兼容引擎)依旧是本地无网场景下最轻量的批量文件名提取方案。Power Query 虽能连文件夹,但 2026 Spring 版在 Linux 与 HarmonyOS NEXT 端仍标记为实验功能,且政企电脑默认关闭外部数据连接器;宏则完全离线,代码可内嵌 .xlsm 文件,便于后续审计与版本留存。

一句话:当你需要可重复、可审计、可离线地把“文件名+修改时间+大小”一次性扫进工作表,宏是最小权限的解决路径。

功能定位:为什么选宏而不是 Power Query
功能定位:为什么选宏而不是 Power Query

前置检查:版本、权限与宏开启

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\SecurityVBAWarnings 设为 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>;经验性观察,该目录已做稀疏文件处理,宏读取到的“大小”为云端完整大小,与本地占用磁盘空间无关,可用于对账

1. WPS 云本地缓存
1. WPS 云本地缓存

2. OneDrive 按需文件

若文件夹含“云-only”文件,fso.File.Size 仍能返回完整字节,但首次访问会触发下载,批量遍历可能耗时数分钟。建议提前在资源管理器右键 → 始终保留在此设备,再运行宏,可避免中途卡顿。

合规与数据留存:四步留痕

  1. 把宏文件保存为 .xlsm,而非 .xlsx,确保代码随文件走;
  2. 在结果表尾部加扫描时间戳Now())与Windows 用户名Environ("USERNAME")),满足审计追溯;
  3. 若文件清单涉及客户资料,把存放目录的只读权限写进代码注释,提示后续用户勿改;
  4. 用 WPS 的历史版本功能(文件 → 云备份 → 查看历史)保留每次扫描前的快照,方便回退。

不适用场景清单

  • 超过 100 万文件:Dir 递归会耗尽 32 位 VBA 内存,出现“溢出”错误;此时应改用 Python 脚本 + Power Query。
  • 实时同步监控:宏只能一次性批量,若需文件变动即时写入,请用系统自带的文件资源管理器日志或第三方实时监控工具。
  • 非 Windows 单文件系统:macOS 对 NTFS 外接硬盘仅读,宏无法写入结果表到同一盘符;需先转存到本地 APFS 卷。

常见故障排查表

现象最可能原因验证与处置
运行按钮灰色宏被企业策略禁用注册表确认 VBAWarnings=1,或让管理员推送例外策略
结果表空白路径末尾缺少 \在 InputBox 后加 If Right(path,1)<>"\" Then path=path&"\"
错误 76:路径未找到网络驱动器未映射资源管理器先手动点开对应盘,确保已用同一用户身份挂载
中文文件名乱码系统区域语言非 UTF-16WPS 选项 → 常规与保存 → 勾选“使用 Unicode 作为默认编码”

最佳实践 5 条(检查表)

  1. 路径用 InputBox 而非硬编码,防止换电脑后失效;
  2. 结果表加“扫描批次”GUID(WorksheetFunction.Text(Rnd(), "0000000000")),方便多轮对比;
  3. 把宏绑定到形状按钮,并写 Application.ScreenUpdating = False,减少刷新闪烁;
  4. 对网络驱动器先 Dir 探测,若返回空则提前退出,避免长时间无响应;
  5. 定期用“文件 → 检查文档”一键删除隐藏属性,防止宏里残留旧路径信息。

未来趋势:宏的下一站

经验性观察,WPS 在 2026 路线图中已提到“JS 宏”双引擎预览,未来或可在 Linux 与 HarmonyOS NEXT 上脱离 VBA 依赖;若正式落地,同一套脚本有望跨平台零修改运行。现阶段建议继续沿用 VBA 兼容层,同时把核心逻辑封装成函数,届时只需替换入口即可平滑迁移。

📺 相关视频教程

Excel将每行数据批量生成制式表格 excel技巧 wps