实用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.一键批量删除工作表

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

相关推荐
Go Work1 小时前
两个等值条件摆着,MySQL 偏要全表扫
经验分享·笔记
深圳智根网络程序开发6 小时前
WordPress固定链接怎么设?改不对谷歌收录直接崩
经验分享
德思特6 小时前
如何提升 5G 移动性切换验证效率?德思特 Amarisoft Callbox 新增 NR SA LTM 测试功能详解
经验分享·无线通信·车载通信
虹科数字化与AR9 小时前
农业机械AR质检ROI怎么算?从搬运、测量、返工和交付成本入手
经验分享·ar·质检·农业机械
聪明的笨猪猪1 天前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
仓库日记1 天前
Excel进销存何时该换?用3项检查判断是否需要软件
经验分享·excel·进销存·开单软件
AI工具挖掘机1 天前
开源!2个Skill复刻带货视频、图文和Live,做百号矩阵
经验分享
虹科网络安全2 天前
Redis Radar:在统一视图中掌握 Redis 部署、健康与容量
经验分享·redis·艾体宝·艾体宝it·艾体宝redis
聪明的笨猪猪2 天前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
David猪大卫2 天前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习