在工作中可能会遇到需要对大量word文件中的文字内容进行批量替换的情况。相比excel的批量处理,个人感觉word文档中由于包含大量样式信息,批处理时总感觉有顾虑。一者担心影响了文档的格式,误修改了文档的样式,那后果……整过文档的小伙伴都懂的;二者担心批处理不全面,例如公式、表格、图表或者文本框。
这次因为工作需要,查到了一位大佬贡献的方法,由于文中代码是贴的图,自己敲了出来,并稍作修改,测试通过,分享给大家。基本思路是先将待处理的文件统一放在同一文件夹中,使用VBA选择待处理文件目录,遍历文件夹中所有文件;通过input对话框让用户输入被替换文本和替换文本的内容;使用document对象的content.find方法进行查找和替换。
可以定义一个sub直接运行,也可以加一个按钮,将代码写到按钮的click方法中。
Private Sub CommandButton1_Click()
????'关闭屏幕刷新
????Application.ScreenUpdating = False
????'定义变量
????Dim myFile$, myPath$, i%, myDoc As Object, myAPP As Object, txt$, Re_txt$
????'设置应用对象,建立临时进程
????Set myAPP = New Word.Application
????'显示选择文件夹对话框
????With Application.FileDialog(msoFileDialogFolderPicker)
????????.Title = "选择目标文件夹"
????????If .Show = -1 Then
????????????'读取选择的文件路径
????????????myPath = .SelectedItems(1)
????????Else
????????????Exit Sub
????????End If
????End With
????'文件夹目录和文件完整路径
????myPath = myPath & ""
????myFile = Dir(myPath & "\*.docx")
????'获取被替换的文字
????txt = InputBox("需要替换的文字:")
????'获取替换文件
????Re_txt = InputBox("替换成:")
????'显示打开文档
????myAPP.Visible = True '是否显示打开文档
????'循环处理文件夹中的全部文件
????Do While myFile <> "" '文件不为空
????????'打开文件
????????Set myDoc = myAPP.Documents.Open(myPath & "\" & myFile)
????????'判断文件是否受保护,仅对未受保护的文件有效
????????If myDoc.ProtectionType = wdNoProtection Then
????????????'查找替换
????????????With myDoc.Content.Find
????????????????.Text = txt
????????????????.Replacement.Text = Re_txt
????????????????.Forward = True
????????????????.Wrap = 2
????????????????.Format = False
????????????????.MatchCase = False
????????????????.MatchWholeWord = False
????????????????.MatchByte = True
????????????????.MatchWildcards = False
????????????????.MatchSoundsLike = False
????????????????.MatchAllWordForms = False
????????????????.Execute Replace:=2
????????????End With
????????End If
????????'设置文件窗口状态,避免再次打开时被隐藏
????????Application.WindowState = wdWindowStateNormal
????????'保存并关闭文档
????????myDoc.Save
????????myDoc.Close
????????myFile = Dir
????Loop
?????'关闭临时进程
????myAPP.Quit
????'打开屏幕更新
????Application.ScreenUpdating = True
????'输出提示信息
????MsgBox ("全部替换完毕!")
End Sub
果不出老衲所料,从实际运行效果看,正文、表格、公式中的内容可以正常完成替换,文本框和形状(形状本质上就是一种特定的文本框)中的文本用这种方法无法实现批量替换。
使用时还是要谨慎,用过之后还要手工检查疗效。不过毕竟能完成一部分,聊胜于无吧。
如果不是非用word文档不可,还是建议尽量用excel表格处理报表之类的文档,便于后期批量处理。
【参考代码来源】https://jingyan.baidu.com/article/647f011576aad23e2148a885.html
喜欢的话欢迎关注、点赞、转发或评论交流!
点赞富三代,分享美一生! ^|^