ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: 413191246se

[分享] 循环遍历文件夹及子文件夹(宏)2020-8-9(定稿)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-8-12 09:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢各位大佬分享,收藏备用!

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-9-1 16:27 | 显示全部楼层
No.        NAME        TEST-TIME        CODE-LINES
1                duquancai        81.71秒        27行
2                gbgbxgb        82.54秒        27行
3                Harvda        82.82秒        28行
4                xiaohualu        83.17秒        28行
5                FileSearch        83.33秒        22行
6                cuanju        83.93秒        42行
天!经过测试,5位老师(其中一位是外国人,挪威人Harvda,比我厉害,也是老师)编码的for Word2007-2019循环遍历文件夹及子文件夹的宏,竟然全部适用于Word2003!
再加上Word2003本身也有一个FileSearch方法,同样也管事(但有时我觉得不管事似的)。

TA的精华主题

TA的得分主题

发表于 2020-12-9 14:28 | 显示全部楼层
本帖最后由 wdpfox 于 2020-12-11 16:27 编辑

                  已解决。

TA的精华主题

TA的得分主题

发表于 2024-1-7 11:54 | 显示全部楼层
大侠,总是显示 If GetAttr(FolderName & strFileName) And vbDirectory Then出错,是什么原因

TA的精华主题

TA的得分主题

发表于 2024-1-7 12:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
可否将WORD排版前格式,运行宏后的格式,分别上传并说明一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-8 03:11 | 显示全部楼层
* 楼上朋友:下面附上 3 位老师的代码,请注意,对于单个文档来说,是已经打开和自动保存的,你只需要处理一下单个文档的格式(我这里是设置为红色,要对 DocProcess 处理一下)即可。哪位老师的代码都可以用,因为我都测试过,请将下面的代码复制到空白文档后,再剪切到 VBE 中,再按 Alt + F8 找到3 位老师的谁的代码均可执行之。
  1. Sub LoopFolder_duquancai()
  2. '循环遍历文件夹及子文件夹
  3.     Dim pPath$, f As Object, fd As Object, fso As Object, Stack$(), top&, n&, stxt$, doc As Document, x&
  4.     pPath = SelectFolder
  5.     Set fso = CreateObject("Scripting.FileSystemObject")
  6.     top = 1
  7.     ReDim Stack(0 To top)
  8.     Do While top >= 1
  9.         For Each f In fso.getFolder(pPath).Files
  10.             n = n + 1
  11.             stxt = f.Path
  12.             If stxt Like "*.doc*" Then
  13.                 Set doc = Documents.Open(FileName:=stxt)
  14.                 DocProcess '单个文档处理
  15.                 doc.Close SaveChanges:=wdSaveChanges
  16.                 x = x + 1
  17.             End If
  18.         Next
  19.         For Each fd In fso.getFolder(pPath).subFolders
  20.             Stack(top) = fd.Path
  21.             top = top + 1
  22.             If top > UBound(Stack) Then ReDim Preserve Stack(0 To top)
  23.         Next
  24.         If top > 0 Then pPath = Stack(top - 1): top = top - 1
  25.     Loop
  26.     Set f = Nothing
  27.     Set fd = Nothing
  28.     Set fso = Nothing
  29.     MsgBox "处理完毕!共 " & n & " 个文档!Word 文档 " & x & " 个!", 0 + 48
  30. End Sub

  31. Sub LoopFolder_gbgbxgb()
  32. '循环遍历文件夹及子文件夹
  33.     Dim d As Object, thePath$, theStr$, i&, j&, k&, doc As Document
  34.     thePath = SelectFolder
  35.     Set d = CreateObject("Scripting.Dictionary")
  36.     d(thePath) = ""
  37.     Do While i < d.Count
  38.         thePath = d.keys()(i)
  39.         theStr = Dir(thePath, vbDirectory)
  40.         Do While theStr <> ""
  41.             If theStr <> "." And theStr <> ".." Then
  42.                 If (GetAttr(thePath & theStr) And vbDirectory) = vbDirectory Then
  43.                     d(thePath & theStr & "") = ""
  44.                 Else
  45.                     j = j + 1
  46.                     If thePath & theStr Like "*.doc*" Then
  47.                         Set doc = Documents.Open(FileName:=thePath & theStr)
  48.                         DocProcess '单个文档处理
  49.                         doc.Close SaveChanges:=wdSaveChanges
  50.                         k = k + 1
  51.                     End If
  52.                 End If
  53.             End If
  54.             theStr = Dir
  55.         Loop
  56.         i = i + 1
  57.     Loop
  58.     Set d = Nothing
  59.     MsgBox "处理完毕!共 " & j & " 个文档!Word 文档 " & k & " 个!", 0 + 48
  60. End Sub

  61. Sub LoopFolder_xiaohualu()
  62. '循环遍历文件夹及子文件夹
  63.     Dim d, n&, m&, x&, mydir, dk, doc As Document, i&
  64.     Set d = CreateObject("Scripting.Dictionary")
  65.     d(SelectFolder) = ""
  66.     Do While n < d.Count
  67.         dk = d.keys
  68.         mydir = Dir(dk(n), vbDirectory)
  69.         Do While mydir <> ""
  70.             If mydir <> "." And mydir <> ".." Then
  71.                 If GetAttr(dk(n) & mydir) = vbDirectory Then
  72.                     d(dk(n) & mydir & "") = ""
  73.                     m = m + 1
  74.                 Else
  75.                     x = x + 1
  76.                     If dk(n) & mydir Like "*.doc*" Then
  77.                         Set doc = Documents.Open(FileName:=dk(n) & mydir)
  78.                         DocProcess '单个文档处理
  79.                         doc.Close SaveChanges:=wdSaveChanges
  80.                         i = i + 1
  81.                     End If
  82.                 End If
  83.             End If
  84.             mydir = Dir
  85.         Loop
  86.         n = n + 1
  87.     Loop
  88.     Set d = Nothing
  89.     Set dk = Nothing
  90.     MsgBox "处理完毕!共 " & x & " 个文档!Word 文档 " & i & " 个!", 0 + 48
  91. End Sub

  92. Function SelectFolder() As String
  93.     With Application.FileDialog(msoFileDialogFolderPicker)
  94.         If .Show Then SelectFolder = .SelectedItems(1) & "" Else End
  95.     End With
  96.     If MsgBox("是否选择文件夹 """ & SelectFolder & """ ?", 4 + 16) = vbNo Then End
  97. End Function

  98. Sub DocProcess()
  99.     ActiveDocument.Content.Font.Color = wdColorRed
  100. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-26 03:33 , Processed in 0.030117 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表