ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求一个查找文档内多余的标点符号并把它们改为蓝色的宏代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-10-4 21:01 | 显示全部楼层
139:我觉得现在还无法准确区分汉字/汉字标点符号及一些英文标点符号,所以,我觉得批量处理文档也不太好,但如果你执意为之,也可以,建议每次批量处理不要太多,以免程序无响应(文件数<=300个为宜,在处理时不要动键盘和鼠标)。新增了省略号和破折号例外。——打包备份原文件后,先用几个示例文件试验之。
  1. Sub 循环遍历文件夹_查找重复标点符号()
  2.     On Error Resume Next
  3.     Dim fd As FileDialog, i As Long, doc As Document, p As String, t As Long, s As Long, j As Paragraph
  4.     Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  5.     If fd.Show = -1 Then p = fd.SelectedItems(1) Else Exit Sub
  6.     Set fd = Nothing
  7.     If MsgBox("是否处理文件夹 " & p & " ?", vbYesNo + vbExclamation, "循环遍历文件夹_查找重复标点符号") = vbNo Then Exit Sub
  8.     With Application.FileSearch
  9.         .NewSearch
  10.         .LookIn = p
  11.         .SearchSubFolders = True
  12.         .FileName = "*.doc"
  13.         If .Execute > 0 Then
  14.             For i = 1 To .FoundFiles.Count
  15.                 Set doc = Documents.Open(FileName:=.FoundFiles(i))
  16.                 '查找重复标点符号
  17.                 For Each j In doc.Paragraphs
  18.                     j.Range.Select
  19.                     If Len(j.Range) = 1 Then GoTo SkipEmpty
  20.                     Selection.HomeKey Unit:=wdLine
  21.                     Do
  22.                         Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
  23.                         If Selection.Characters.Last Like vbCr Then GoTo SkipEmpty
  24.                         If Selection.Characters.Last Like "[。;:,、!?;:,.?!…—]" Then
  25.                             Do
  26.                                 Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
  27.                             Loop Until Selection.Characters.Last Like "[!。;:,、!?;:,.?!…—]"
  28.                             Selection.MoveEnd Unit:=wdCharacter, Count:=-1
  29.                             If Len(Selection) > 1 And Not (Selection Like "……") And Not (Selection Like "——") Then
  30.                                 Selection.Font.Color = wdColorBlue '蓝色
  31. '                                Selection.Range.HighlightColorIndex = wdBrightGreen '突出显示(鲜绿)
  32.                             End If
  33.                         End If
  34.                         Selection.MoveRight Unit:=wdCharacter, Count:=1
  35.                     Loop
  36. SkipEmpty:
  37.                 Next
  38.                 doc.Close savechanges:=wdSaveChanges
  39.             Next i
  40.             MsgBox "处理完毕!共处理 " & .FoundFiles.Count & " 个文件!", vbOKOnly + vbExclamation, "循环遍历文件夹_查找重复标点符号"
  41.         Else
  42.             MsgBox "未发现文件!", vbOKOnly + vbCritical, "循环遍历文件夹_查找重复标点符号"
  43.         End If
  44.     End With
  45. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-5 13:19 | 显示全部楼层
本帖最后由 13907933959 于 2015-10-6 07:18 编辑
413191246se 发表于 2015-10-4 21:01
139:我觉得现在还无法准确区分汉字/汉字标点符号及一些英文标点符号,所以,我觉得批量处理文档也不太好, ...

师傅、又不知怎么会事,回复的内容老是说要审查,几个小时都没有反应了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-5 17:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 13907933959 于 2015-10-8 07:22 编辑
413191246se 发表于 2015-10-4 21:01
139:我觉得现在还无法准确区分汉字/汉字标点符号及一些英文标点符号,所以,我觉得批量处理文档也不太好, ...

师傅好!

由于今天上午来的病人比较多,比较忙,回复晚了请师傅见谅!

刚刚用35个文件试了 “循环遍历文件夹_查找重复标点符号”,的宏,总共耗时26分钟,准确率98左右%,好用!

师傅、我之所以要请你为我编写这个宏,主要是为了节省时间,如手工一个个查找再加修改没有个一、二年是很难完成,说句实话,我也不能总把时间耗在这整理资料上面,尽管这个对我以后也有帮助,毕竟主业不是这个,再说家里的经济也不允许这样长久的下去没有收入,所以我想尽快从这上面摆脱出来,回到主业上,还是网上哪句话说得好:“穷人最大的拦路虎是钱”,“富人最大的拦路虎是修养”  如果经济富裕的活,真想跟师傅你学这个。

师傅、不知怎么回事,每当你帮我编好一个宏后,我心里总有生命被延长的感觉,这也可能和我的职业有关,医生是通过自已的知识给病人延长生命、减轻痛苦,师傅你也是用自已的知识的帮助他人节省时间,不也是变相的延长了他人的生命、解除了他的烦恼吗?只是方式的不同。我觉得你的更高尚,你是无偿帮助他人。有了师傅的这个宏,有望在今年春节前把它们整理完,别外、我想利用这次机会,顺便把所有文档里面的这种括号()替换成这种括号()

1、求师傅再编写几句替换括号的代码放在该宏里面。

2、求师傅再编写一个可单独使用的“循环遍历文件夹替换某个字及符号”的宏,如:可单独使用的“循环遍历文件夹将这种括号()替换成这种括号()”,以便徒弟以后使用,徒弟拜谢师傅!

TA的精华主题

TA的得分主题

发表于 2015-10-6 14:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
* 139:过奖了!——建议批量处理不要太多,以免不响应。----下面是两个宏,看清宏名执行之,一般可以按 Alt+F8 找到所需宏双击或点击“运行”按钮,常用的也可以拖到工具栏上成为按钮,或设宏为热键F3/F4。
  1. Sub 循环遍历文件夹_查找重复标点符号()
  2.     On Error Resume Next
  3.     Dim fd As FileDialog, i As Long, doc As Document, p As String, t As Long, s As Long, j As Paragraph
  4.     Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  5.     If fd.Show = -1 Then p = fd.SelectedItems(1) Else Exit Sub
  6.     Set fd = Nothing
  7.     If MsgBox("是否处理文件夹 " & p & " ?", vbYesNo + vbExclamation, "循环遍历文件夹_查找重复标点符号") = vbNo Then Exit Sub
  8.     With Application.FileSearch
  9.         .NewSearch
  10.         .LookIn = p
  11.         .SearchSubFolders = True
  12.         .FileName = "*.doc"
  13.         If .Execute > 0 Then
  14.             For i = 1 To .FoundFiles.Count
  15.                 Set doc = Documents.Open(FileName:=.FoundFiles(i))
  16.                 doc.Content.Find.Execute findtext:="(", ReplaceWith:="(", Replace:=wdReplaceAll
  17.                 doc.Content.Find.Execute findtext:=")", ReplaceWith:=")", Replace:=wdReplaceAll
  18.                 '查找重复标点符号
  19.                 For Each j In doc.Paragraphs
  20.                     j.Range.Select
  21.                     If Len(j.Range) = 1 Then GoTo SkipEmpty
  22.                     Selection.HomeKey Unit:=wdLine
  23.                     Do
  24.                         Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
  25.                         If Selection.Characters.Last Like vbCr Then GoTo SkipEmpty
  26.                         If Selection.Characters.Last Like "[。;:,、!?;:,.?!…—]" Then
  27.                             Do
  28.                                 Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
  29.                             Loop Until Selection.Characters.Last Like "[!。;:,、!?;:,.?!…—]"
  30.                             Selection.MoveEnd Unit:=wdCharacter, Count:=-1
  31.                             If Len(Selection) > 1 And Not (Selection Like "……") And Not (Selection Like "——") Then
  32.                                 Selection.Font.Color = wdColorBlue '蓝色
  33. '                                Selection.Range.HighlightColorIndex = wdBrightGreen '突出显示(鲜绿)
  34.                             End If
  35.                         End If
  36.                         Selection.MoveRight Unit:=wdCharacter, Count:=1
  37.                     Loop
  38. SkipEmpty:
  39.                 Next
  40.                 doc.Close savechanges:=wdSaveChanges
  41.             Next i
  42.             MsgBox "处理完毕!共处理 " & .FoundFiles.Count & " 个文件!", vbOKOnly + vbExclamation, "循环遍历文件夹_查找重复标点符号"
  43.         Else
  44.             MsgBox "未发现文件!", vbOKOnly + vbCritical, "循环遍历文件夹_查找重复标点符号"
  45.         End If
  46.     End With
  47. End Sub
  48. Sub 循环遍历文件夹_替换英文括号为中文()
  49.     On Error Resume Next
  50.     Dim fd As FileDialog, i As Long, doc As Document, p As String, t As Long, s As Long, j As Paragraph
  51.     Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  52.     If fd.Show = -1 Then p = fd.SelectedItems(1) Else Exit Sub
  53.     Set fd = Nothing
  54.     If MsgBox("是否处理文件夹 " & p & " ?", vbYesNo + vbExclamation, "循环遍历文件夹_查找重复标点符号") = vbNo Then Exit Sub
  55.     With Application.FileSearch
  56.         .NewSearch
  57.         .LookIn = p
  58.         .SearchSubFolders = True
  59.         .FileName = "*.doc"
  60.         If .Execute > 0 Then
  61.             For i = 1 To .FoundFiles.Count
  62.                 Set doc = Documents.Open(FileName:=.FoundFiles(i))
  63.                 doc.Content.Find.Execute findtext:="(", ReplaceWith:="(", Replace:=wdReplaceAll
  64.                 doc.Content.Find.Execute findtext:=")", ReplaceWith:=")", Replace:=wdReplaceAll
  65.                 doc.Close savechanges:=wdSaveChanges
  66.             Next i
  67.             MsgBox "处理完毕!共处理 " & .FoundFiles.Count & " 个文件!", vbOKOnly + vbExclamation, "循环遍历文件夹_查找重复标点符号"
  68.         Else
  69.             MsgBox "未发现文件!", vbOKOnly + vbCritical, "循环遍历文件夹_查找重复标点符号"
  70.         End If
  71.     End With
  72. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-7 08:45 | 显示全部楼层
本帖最后由 13907933959 于 2015-10-7 14:01 编辑
413191246se 发表于 2015-10-6 14:28
* 139:过奖了!——建议批量处理不要太多,以免不响应。----下面是两个宏,看清宏名执行之,一般可以按 Al ...

师傅好!
二个宏都非常好用,感谢师傅一次次为徒弟操劳!
师傅、这二个宏能不能再加几句代码,让它一次就可以处理文件夹内包含有子文件夹也有多个单个文件,文件夹内包含有子文件夹也有多个单个文件……。因我的文件大多是采用了这种方式的,如能处理这种,我就不用守在电脑前。

师傅、差一点忘了,还要劳你再编二句把文档内“手动换行符”替换成“段落标记”和 把文档内“段落标记”替换成“手动换行符”的代码放在二个宏内。谢谢!


TA的精华主题

TA的得分主题

发表于 2015-10-7 14:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
139:循环遍历文件夹的程序,本身就包含在子文件夹中的文件了!
——还要劳你再编二句把文档内“手动换行符”替换成“段落标记”和 把文档内“段落标记”替换成“手动换行符”的代码放在二个宏内——你这两个相反的动作,在一个宏里?那不是不如不做?

***将下面这句“手动换行符”替换为“段落标记”的代码
doc.Content.Find.Execute findtext:="^l", ReplaceWith:="^p", Replace:=wdReplaceAll
放到下面的代码下一行即可:
Set doc = Documents.Open(FileName:=.FoundFiles(i))

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-7 16:00 | 显示全部楼层
本帖最后由 13907933959 于 2015-10-7 16:01 编辑
413191246se 发表于 2015-10-7 14:07
139:循环遍历文件夹的程序,本身就包含在子文件夹中的文件了!
——还要劳你再编二句把文档内“手动换行 ...

师傅好!
循环遍历文件夹的程序,本身就包含在子文件夹中的文件了!
也可包括子文件夹外的多个单独文件吗?如是这样,我真是外行加笨!昨天晚上我一个文件夹、一个文件夹的弄,子文件夹外的多个单独文件,我还准备再装到一个文件夹再处理,我以为一次只能处理一个文件夹,不包括里面的子文件夹及子文件夹外的多个单独文件。唉、真是没知识、没文化,闹出了大笑活。

——二句把文档内 “手动换行符” 替换成 “段落标记” 和 把文档内 “段落标记” 替换成 “手动换行符” 的代码放在二个宏内——你这两个相反的动作,在一个宏里?那不是不如不做?
我是想请师傅编写好,用的时侯分开用,我是怕这二句代码会有不同,师傅是不是说,二个引号内的 “手动换行符” 和 “段落标记” 换一下位就可以了?
徒弟的笨师傅是知道的,还请师傅点化!

TA的精华主题

TA的得分主题

发表于 2015-10-8 09:40 | 显示全部楼层
139:循环遍历文件夹,这个文件夹,已经包含无数层子文件夹了。第二个详见15楼。(手动换号符必须替换为段落标记,这样段落排版才能完成;而段落标记替换为手动换行符,一般时候不需要。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-8 09:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2015-10-8 09:40
139:循环遍历文件夹,这个文件夹,已经包含无数层子文件夹了。第二个详见15楼。(手动换号符必须替换为段 ...

感谢师傅点化笨徒!师傅编写的几个宏、徒弟以经用上,现在是:咱老百姓啊!真呀真高兴呀,真呀真高兴!!!感谢师傅……!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-10 10:23 | 显示全部楼层
413191246se 发表于 2015-10-8 09:40
139:循环遍历文件夹,这个文件夹,已经包含无数层子文件夹了。第二个详见15楼。(手动换号符必须替换为段 ...

师傅好!  请看附件!

附件.rar

3.79 KB, 下载次数: 31

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-15 18:35 , Processed in 0.024775 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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