Word邮件合并文档后快速分割

✔ 问题场景

对于多个法律文档,只有个别化信息不一样的时候,逐个手动填写个别化信息,难免低效且容易出错,导致文档信息“张冠李戴”。Microsoft Word的邮件合并功能为此提供良好解决方案,只需做一个母文档,个别化信息(字段)空出,导入相关个别化字段的excel表格或word表格,然后在相应位置插入相关字段,然后完成合并即可得到多份文档。只要所导入的个别化字段表格信息未发生错误,就可以完全避免生成文档相关信息错漏。具体方法,相信很多人在写批量律师函、生成批量协议的时候均使用过,不再演示或赘述。
问题在于,邮件合并生成的文档内容全在一个word里,如果要单独使用,还需要按节提取为单个独立文档,手动复制再粘贴显然不是解决问题的好方法。

✔ 解决方案

Microsoft Word强大的宏功能可以相对快速高效解决上述难题。具体步骤如下:

1、假设邮件合并导出A-Z总文档,均在一个Word里,尚未提取为单独文档;
2、在此文档页面,按快捷键Alt+F11,调出Microsoft Visual Basic for Application页面;
3、在Microsoft Visual Basic for Application页面依次“插入”-“模块”,并完整输入如下VBA代码并保存:

Sub 邮件合并后分割 ()
Dim mySec As Section, i As Long, myDoc As Document, SourceDoc As Document       '定义变量
 Set SourceDoc = ActiveDocument                                                 '设置源文档为当前活动文档
 For Each mySec In SourceDoc.Sections                                           '设置当前文档每节循环
 If mySec.PageSetup.SectionStart = wdSectionNewPage And mySec.Index > 1 Then
  Set myDoc = Application.Documents.Add
  myDoc.Content.FormattedText = SourceDoc.Range(i, mySec.Range.Start - 1)
  myDoc.Content.Sections.Last.PageSetup.SectionStart = _
  SourceDoc.Range(i, mySec.Range.Start - 1).Sections.Last.PageSetup.SectionStart
  i = mySec.Range.Start
End If
  
If mySec.Index = SourceDoc.Sections.Count Then                                  '最后一节的处理
 Set myDoc = Application.Documents.Add
 myDoc.Content.FormattedText = SourceDoc.Range(i, SourceDoc.Content.End)
 myDoc.Content.Sections.Last.PageSetup.SectionStart = _
 SourceDoc.Range(i, SourceDoc.Content.End).Sections.Last.PageSetup.SectionStart
End If

Next
End Sub

4、通过word菜单“开发”-“宏”(快捷键)弹出宏命令列表,运行其中的“邮件合并后分割”,即可执行分割A-Z文档为单文档的操作,并逐个保存。

✔ 其他问题

通过以上方法,虽然可以较快解决文档分割问题,但是仍然面临一些其他问题需要解决:

  • 文档分割后文档的段落格式会发生少许变化,例如行间距变大等;
  • 尚未能根据特定规则实现自动重命名及保存。
已有 5 条评论
  1. x201309 x201309

    用excel表格邮件合并完成word之前,对word母文档大纲级别和样式设置好,生成的总文档后可以使用word拆分另存生成单个word文件,也可以解决上述问题,避免了宏的使用。

    1. 好嘞,感谢大神的新思路。

  2. 2666 2666

    cool!

    1. 哈哈哈,后面两个问题你有解决方案吗?

      1. 2666 2666

        没有,我都是导出pdf文件对pdf文件进行分割。

添加新评论