VBA之Word应用:批量替换模板中固定字段的内容并另存为新文件

VBA语言専攻 2024-08-07 19:08:22

《VBA之Word应用》(版权10178982),是我推出第八套教程,教程是专门讲解VBA在Word中的应用,围绕“面向对象编程”讲解,首先让大家认识Word中VBA的对象,以及对象的属性、方法,然后通过实例让大家感受到Word VBA 的妙处。

这套教程是专门针对WORD VBA 的教程,是VBA中的稀缺资源,我给这套教程分归为中级教程,希望大家在VBA入门后再学习这套教程,这样会更加深入的理解面向对象编程的意义。

本套教程共三册十六章,今日内容为第二章部分:VBA之Word应用第二章第八节:批量替换模板中固定字段的内容并另存为新文件

【分享成果,随喜正能量】 你真正要做的事情,连神明都不要讲。安静地做,成功了再说。事以密成,言以泄败,隐忍且蓄势待发。潜龙勿用,才能见龙在天而当。。

第八节 批量替换模板中固定字段的内容并另存为新文件

大家好,我们今日讲解书签内容的最后一讲,这讲的内容是第五节内容的引申,也是Word文档中最为常见的一种批量处理替换文档中固定字段的方案。希望大家能仔细学习并掌握。

1 批量替换文档中固定字段的场景及思路分析

我们在平时Word操作中,最为常见的一种操作是批量替换模板中的固定字段,并形成一个新文件保存下来.如下面的模板截图:

这是我的一份《VBA初级阶段自测题》的文档,要按照学员姓名的不同,修改文档中的姓名、年龄、籍贯后分成不同的文档并分别保存,最后形成若干个不同的文档。当然,在实际的工作中,不一定是这份自测题的文档,或许是一份抗击疫情的表格,或者是一份调查问卷,或者是一份通知的下发文档等等。这种场景在实际工作中利用还是非常多的。如果是手工操作,需要单个打开模板文件,修改上述的固定字段后,然后保存,这种操作单纯是一种重复的操作,没有技术含量,但往往不能出错。

我们知道,对于这类数据处理,VBA是强项。利用VBA来处理这类应用,是最为方便的,可以根据自己的需要随时调整代码的框架。

那么,利用VBA如何来完成批量替换文档中固定字段呢?下面我们看一下思路的分析:

1)在模板文件中需要替换的固定字段处插入不同的书签。

2)利用VBA代码检测模板中的书签,将光标置于第一个书签处,并将选定内容扩展到书签所在行的末尾。

3)将选定的范围进行替换

4)重复上面的2)动作,不过这次是将光标置于第二个书签处,并将选定内容扩展到书签所在行的末尾。

5)将选定范围进行替换。

6)重复上面的2)动作,不过这次是将光标置于第三个书签处,并将选定内容扩展到书签所在行的末尾。

5)将选定范围进行替换。

通过上面的操作完成了我们第一个文档,另存为一个新的文件即可。

2 批量替换文档中固定字段的代码

下面我们先看一下我给出的代码:

Sub mynzI() '批量修改文档的内容

Dim A(3)

Dim myDoc As Document

Dim TEM As String

A(1) = Array("李冰冰", "23", "丹麦")

A(2) = Array("赵冰冰", "25", "唐山")

A(3) = Array("白冰冰", "24", "湖北")

For t = 1 To 3

Set myDoc = Documents.Open(ActiveDocument.Path & "\示例02.docx")

For I = 1 To 3

Selection.GoTo What:=wdGoToBookmark, Name:="C00" & I

Selection.EndKey Unit:=wdLine, Extend:=wdExtend

UU = A(t)

TEM = UU(I - 1)

Selection.Text = TEM & vbCr

Next

ActiveDocument.SaveAs2 UU(0) & "自测题"

ActiveDocument.Close (True)

Next

End Sub

代码截图:

3 批量替换文档中固定字段代码的讲解及测试效果

为了完成我们的测试,我们先要在模板中的固定字段位置插入书签,具体的操作在前面的章节中已经详细地介绍,插入的书签如下面的截图:

我们先来看看代码的讲解:

1)Dim A(3) 定义一个一维数组,我没有给出数组的类型,说明是一个Variant。

2) A(1) = Array("李冰冰", "23", "丹麦")

A(2) = Array("赵冰冰", "25", "唐山")

A(3) = Array("白冰冰", "24", "湖北")

以上是我们定义的数组三个元素,每个元素还是数组。外层的数组是我们将要形成的三个文件,内层数组是每个文件中要替换的每个字段。

3) For t = 1 To 3

Set myDoc = Documents.Open(ActiveDocument.Path & "\示例02.docx")

’内层循环(同4))

ActiveDocument.SaveAs2 UU(0) & "自测题"

ActiveDocument.Close (True)

Next

上面的代码建立第一层循环,这层循环中首先会打开模板文件,在内层循环中进行处理后,最后另存为一个新的命名的文件,并关闭。

4) For I = 1 To 3

Selection.GoTo What:=wdGoToBookmark, Name:="C00" & I

Selection.EndKey Unit:=wdLine, Extend:=wdExtend

UU = A(t)

TEM = UU(I - 1)

Selection.Text = TEM & vbCr

Next

这是一个内层的循环,在内层的循环的,我们首先将光标转跳到Name:="C00" & I处;

然后将选择范围扩展到整行的最末尾(Selection.EndKey Unit:=wdLine, Extend:=wdExtend是将选择范围以行为单位扩展到的行的末尾);TEM = UU(I - 1) 是提取数组的元素; Selection.Text = TEM & vbCr是替换刚才所选中的内容,vbCr是换行符。

代码的测试效果:

运行后,会根据模板文件(“实例02”文件),形成三个独立的文件,如红色框的文件。

我们打开其中的一个文件查看一下内容:

从以上的结果可以看出,完成了我们最初的要求。

今日内容回向:

1 批量修改文档中固定字段的思路是什么?

2 在批量修改文档中固定字段的代码中应用了两重循环,各自的目的是什么?

本讲内容参考程序文件:Doc 002文档.docm

分享成果,随喜正能量

我20多年的VBA实践经验,全部浓缩在下面的各个教程及应用工具中:

0 阅读:8

VBA语言専攻

简介:专注VBA