实用VBA:17.大量word文件中的文本内容进行批量替换

1.需求场景

在工作中可能会遇到需要对大量word文件中的文字内容进行批量替换的情况。相比excel的批量处理,个人感觉word文档中由于包含大量样式信息,批处理时总感觉有顾虑。一者担心影响了文档的格式,误修改了文档的样式,那后果......整过文档的小伙伴都懂的;二者担心批处理不全面,例如公式、表格、图表或者文本框。

需求范例:需要把每个文件中的"李四"统一替换为"张三"

2.解决思路

这次因为工作需要,查到了一位大佬贡献的方法,由于文中代码是贴的图,自己敲了出来,并稍作修改,测试通过,分享给大家。基本思路是先将待处理的文件统一放在同一文件夹中,使用VBA选择待处理文件目录,遍历文件夹中所有文件;通过input对话框让用户输入被替换文本和替换文本的内容;使用document对象的content.find方法进行查找和替换。

3.VBA实现

可以定义一个sub直接运行,也可以加一个按钮,将代码写到按钮的click方法中。

vbnet 复制代码
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

4.运行效果

按钮控件

选择文件夹

输入需要被替换掉的文字

输入替换文字

程序运行结束,批量替换完成

查看替换效果

果不出老衲所料,从实际运行效果看,正文、表格、公式中的内容可以正常完成替换,文本框和形状(形状本质上就是一种特定的文本框)中的文本用这种方法无法实现批量替换。

使用时还是要谨慎,用过之后还要手工检查疗效。不过毕竟能完成一部分,聊胜于无吧。

如果不是非用word文档不可,还是建议尽量用excel表格处理报表之类的文档,便于后期批量处理。

【参考代码来源】https://jingyan.baidu.com/article/647f011576aad23e2148a885.html

喜欢的话欢迎关注、点赞、转发或评论交流!

点赞富三代,分享美一生! ^|^

往期列表

实用VBA:1.向下填充空白单元格

实用VBA:2.隔行插入空白行

实用VBA:3.向下合并空白单元格

实用VBA:4.按列拆分工作表

实用VBA:5.批量汇总工作簿、合并工作表

实用VBA:6.一键批量提取文件名和存储路径

实用VBA:7.按文件列表一键汇总excel工作簿

实用VBA:8.一键输出多表格为单独文件

实用VBA:9.使用Excel批量套模板,一键输出多个工作表

实用VBA:10.用VBA向Excel文件中自动插入图片

实用VBA:11.用Excel自动生成商品调拨单

实用VBA:12.用VBA将txt文本文件导入Excel表格

实用VBA:13.Excel数据批量套模板输出pdf文件

实用VBA:14.在二维数组中查找特定元素

实用VBA:15 一键批量汇总工作表的更优方法

实用VBA:16.一键批量删除工作表

(佛系更新中......)

相关推荐
德思特38 分钟前
从靠天吃饭到科技种田,虹科&德思特与极飞科技聊聊农业无人机不迷路的 “硬核底气“
经验分享
法雅特吉他2 小时前
吉他面板材质技术解析:合板 vs 面单 vs 全单
经验分享·新媒体运营·学习方法·材质·内容运营
kyle~2 小时前
Schema---数据结构的形式化规则描述
数据结构·windows·microsoft
XUHUOJUN3 小时前
Storage Spaces on Shared SAS JBOD 在 Azure Local 解耦架构中的重新定位
microsoft·架构·azure·s2d
Rain的Java大神实战圈3 小时前
高并发下如何防止商品超卖少卖
经验分享·redis·高并发·架构设计·电商·面试经验
编码者卢布3 小时前
【Azure Container App】Key Vault的Secret修改导致Container App重启,是否有办法规避呢?
microsoft·flask·azure
147API5 小时前
Claude 的 Microsoft 365 connector 能写入了,技术接入别跳过权限验收
人工智能·microsoft·claude
BomanLj5 小时前
NSK W4013SA重载双螺母精密滚珠丝杠技术详解
经验分享·规格说明书
娇气的红酒5 小时前
微软对PHP支持的改进,及其它一些胡言乱语
开发语言·microsoft·php
asdzx675 小时前
C# 通过模板生成 Word 文档:文本与图片占位符替换完整攻略
开发语言·c#·word