乐于分享
好东西不私藏

批量制作通知书、合同、文档等——开箱即用的 Word 宏代码

批量制作通知书、合同、文档等——开箱即用的 Word 宏代码

一、问题
要求在Word中填写下表,每人一张表格,而内容在EXCEL表中,如何批量一次生成呢?
二、解决方案
1、解决核心思路(邮件合并宏)
解决办法很多,不再赘述(如邮件合并功能),本次只讲最简单操作最快的方法。而且操作流程简单,新手一学就会。
这是纯 Word 内置宏,无需安装任何插件,直接复制就能用!支持:
批量从Excel 读取数据
自动填充 Word 模板里的占位符(如 {姓名} {日期} {金额})
一键生成几十、上百份独立 Word 文档
自动保存到指定文件夹,命名自定义
2、解决办法
(1)使用前提(10 秒设置)
  • 准备 Word 模板文档(里面用 {占位符} 标记,例如:{姓名} {身份证号})
  • 准备 Excel 数据表格(第一行是表头,必须和 Word 占位符名称完全一致
  • 打开你的 Word 模板 → 按 Alt + F11 打开宏编辑器
2、完整宏代码(直接复制)

Sub 批量生成Word文档()

    ‘==================================================

    ‘ 修复:对象变量未设置 / ThisDocument.Copy 错误

    ‘ 适用:通知书、合同、证明、授权书等批量生成

    ‘==================================================

    ‘===== 请修改这里 =====

    Const ExcelPath = “C:\Users\86139\Desktop\杂货店\数据.xlsx”

    Const SavePath = “C:\Users\86139\Desktop\杂货店\生成结果\”

    Const SheetName = “Sheet1”

    Dim ExcelApp As Object

    Dim wb As Object

    Dim ws As Object

    Dim newDoc As Document

    Dim i As Long, lastRow As Long

    Dim fileName As String

    ‘错误处理

    On Error GoTo ErrHandle

    ‘创建目录

    If Dir(SavePath, vbDirectory) = “” Then MkDir SavePath

    ‘打开Excel

    Set ExcelApp = CreateObject(“Excel.Application”)

    ExcelApp.Visible = False

    Set wb = ExcelApp.Workbooks.Open(ExcelPath)

    Set ws = wb.Sheets(SheetName)

    ‘获取行数

    lastRow = ws.Cells(ws.Rows.Count, 1).End(-4162).Row

    If lastRow < 2 Then

        MsgBox “Excel无数据”

        GoTo Clean

    End If

    ‘循环生成

    For i = 2 To lastRow

        ‘基于当前模板新建文档

        Set newDoc = Documents.Add(Template:=ThisDocument.FullName, NewTemplate:=False)

        ‘替换内容

        Call ReplaceAll(newDoc, “{姓名}”, ws.Cells(i, 1).Value)

        Call ReplaceAll(newDoc, “{身份证号}”, ws.Cells(i, 2).Value)

        Call ReplaceAll(newDoc, “{电话号码}”, ws.Cells(i, 3).Value)

        ‘保存

        fileName = SavePath & ws.Cells(i, 1).Value & “_通知书.docx”

        newDoc.SaveAs2 fileName, 12

        newDoc.Close wdDoNotSaveChanges

        Application.StatusBar = “完成:” & i – 1 & “/” & lastRow – 1

    Next i

    MsgBox “? 生成完成:” & lastRow – 1 & “份”

Clean:

    On Error Resume Next

    wb.Close False

    ExcelApp.Quit

    Set ws = Nothing

    Set wb = Nothing

    Set ExcelApp = Nothing

    Exit Sub

ErrHandle:

    MsgBox “出错:” & Err.Description & vbCrLf & “错误行:” & Erl

    Resume Clean

End Sub

‘全文替换函数

Private Sub ReplaceAll(doc As Document, findStr As String, replaceStr As String)

    With doc.Content.Find

        .ClearFormatting

        .Replacement.ClearFormatting

        .Text = findStr

        .Replacement.Text = replaceStr

        .MatchWholeWord = True

        .Execute Replace:=wdReplaceAll

    End With

End Sub

3、你必须修改的 2 个地方(非常重要)
1. 修改文件路径(代码顶部)
2. 修改占位符对应关系
  • 数字 1 = Excel 第 1 列
  • 数字 2 = Excel 第 2 列
……
就是与表格里的表头一致;
修改之后为:

4、运行方法

  1. 按 Alt + F11 回到 Word
  2. 按 Alt + F8
  3. 选择 批量生成 Word 文档 → 点击「执行」