《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实践经验,全部浓缩在下面的各个教程及应用工具中: