大家好,我们今日讲解”VBA信息获取与处理”教程中第十五个专题”将Excel数据信息传递给WORD应用”的第三节”利用MailMerge实现EXCEL信息的模板化输出”,这个专题是非常实用的知识点,希望大家能掌握利用。教程会提供配套的程序文件。
第三节 利用MailMerge实现EXCEL信息的模板化输出
大家好,我们今日讲解利用MailMerge实现信息的模板化输出。对于MailMerge,很多朋友比较陌生,确实,对于WORD的这个功能,如果不是专业人员,一般的场合是很少利用到的,我们今日的内容也仅仅是利用这个功能完成我们信息模板化输出的目的。
实现场景,我们有一些数据在excel中,要利用这些数据,按照模板做出一些word文档。如下图是我们存储在电子表格中的数据:
我们要根据这些数据生成一些交货单,交货单的格式如下:
在交货单的格式中,商品编号值,收货人值,地址值,以及数量值,检验值分别要对应excel表格中的相应数据,形成一个以商品编号为文件名的word格式出货单。相信看到我上述实现场景的描述后,很多朋友都会觉得非常熟悉,对的,这个流程就是出货的流程,大小公司大同小异。那么如何实现这个场景呢?我们这讲就来实现这个任务
1 实现excel中数据模板化输出的思路分析
为了实现上述的场景,我们要做一些流程的规范,上面的输出格式要作为一个模板文件来存在,对于excel中的每一条数据,要首先复制一个模板文件,打开它。然后将MailMerge的OpenDataSource设置成EXCEL的对应数据。在打开的那个模板文件中查找到每个字段,然后用数据源中数据替换即可。最后把那个打开的模板文件另存为我们需要的文件名。
在复制模板文件的时候,我们需要CreateObject(“
Scripting.FileSystemObject”😉引用,利用FSO来完成。在完成源数据和模板数据合并后,要及时回收内存。
整个过程的思路是比较清晰的,主要是代码的实现,在我的各套教程中都在极力推崇”积木编程”的思想,大家要学会修正积木,组合积木来完成自己的实际工作,尽可能不要自己去写源码,当然,源码要弄懂才更有利于我们的使用。
2 实现excel中数据模板化输出的代码实现
我还是先贴出这讲的实测代码,然后再进行简单的讲解:
Sub mynzC() ‘将excel文件与WORD模板文件合并成新的文件
Dim objWord As Object, objWordNew As Object
Dim objMerge As Object, objFso As Object
Dim avntField As Variant
‘复制模板
strCopyMyPath = ThisWorkbook.Path& “ 15M模板.docx”
strNewPath = ThisWorkbook.Path& “模板temp.docx”
Set objFso = CreateObject(“Scripting.FileSystemObject”😉
objFso.CopyFilestrCopyMyPath, strNewPath
strMyPath = ThisWorkbook.Path
Set objWord = CreateObject(“Word.Application”😉
With objWord
Set objWordNew= .Documents.Open(strNewPath)
objWord.Visible = False
With .ActiveDocument
.MailMerge.OpenDataSource _
Name:=ThisWorkbook.FullName, _
Connection:=”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” &ThisWorkbook.FullName& “; “, _
SQLStatement:=”SELECT * FROM `Sheet2$`”, SubType:=1
avntField = Array(“商品编号”, “收货人”, “地址”, “数量”, “检验”😉
‘将光标移动到首行
objWord.Selection.HomeKey Unit:=wdLine
For i = 0 To UBound(avntField)
‘查找avntField(i) & “域”
objWord.Selection.Find.Execute (avntField(i) & “值”😉
‘将选定内容替换为名称为avntField(i) 的邮件合并域。
.MailMerge.Fields.Add Range:=objWord.Selection.Range, Name:=avntField(i)
Next
Set objMerge= .MailMerge
With objMerge.DataSource
For j = 1 To .RecordCount
‘将记录J与主文档合并。
.FirstRecord = j
.LastRecord = j
‘提取记录的名字
strMyName= .DataFields(1).Value
‘执行合并
.Parent.Execute
‘保存文件
objWord.ActiveDocument.SaveAsstrMyPath& “” &strMyName& “”.doc””
objWord.ActiveDocument.Close True
‘指向结果集内的下一条记录。
.ActiveRecord = -2
Next
End With
End With
objWordNew.Close
objWord.Quit
Kill strNewPath
End With
Set objWordNew = Nothing
Set objWord = Nothing
Set objFso = Nothing
Set objMerge = Nothing
MsgBox “”文件处理完毕””
End Sub
代码的部分截图:
代码讲解:
1)’复制模板
strCopyMyPath = ThisWorkbook.Path& “” 15M模板.docx””
strNewPath = ThisWorkbook.Path& “”模板temp.docx””
Set objFso = CreateObject(“”Scripting.FileSystemObject””😉
objFso.CopyFilestrCopyMyPath
Connection:=””Provider=Microsoft.ACE.OLEDB.12.0;Data Source=”” &ThisWorkbook.FullName& “”; “”
声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!