You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Excel VBA合并两个Word文档并批量循环执行?

实现Excel宏批量生成Word文档并合并外部内容

可以实现你的需求,以下是修改后的完整宏代码,包含打开第二个Word文档并将其内容追加到主文档末尾的功能,同时修复原代码中的缺失环节:

Sub LetterMerge()
    Dim ws As Worksheet
    Set ws = Sheets("Letter Builder")
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Dim TemplateNo As Integer
    TemplateNo = Application.WorksheetFunction.CountA(ws.Range("A9:A200"))
    
    Dim filePath As String
    filePath = ActiveWorkbook.Path & "\"
    
    Dim WordApp As Object
    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True ' 如需后台执行可改为False
    
    Dim letter As Object, secondDoc As Object
    Dim SyndNo As String, Address1 As String, CEO As String
    Dim Recipient As String, Cap As String
    Dim i As Integer
    
    ' 循环处理每一行数据
    For i = 9 To 9 + TemplateNo - 1 ' 按实际有效行数循环,避免空行
        ' 读取Excel数据
        With ws
            SyndNo = .Cells(i, 47).Value
            Address1 = .Cells(i, 6).Value
            CEO = .Cells(i, 7).Value
            Recipient = .Cells(i, 8).Value
            Cap = .Cells(i, 34).Value
        End With
        
        ' 打开带书签的Word模板
        Set letter = WordApp.Documents.Open("你的带书签模板路径.docx")
        
        ' 填充书签内容
        letter.Bookmarks("SyndNo").Range.Text = SyndNo
        letter.Bookmarks("CEO").Range.Text = CEO
        letter.Bookmarks("Recipient").Range.Text = Recipient
        letter.Bookmarks("Cap").Range.Text = Cap
        
        ' 打开要复制内容的第二个Word文档
        Set secondDoc = WordApp.Documents.Open("需要复制内容的Word文档路径.docx")
        
        ' 复制第二个文档的全部内容
        secondDoc.Content.Copy
        
        ' 将内容粘贴到主文档末尾
        letter.Content.End.Paste
        
        ' 关闭第二个文档,不保存
        secondDoc.Close SaveChanges:=False
        
        ' 保存生成的文档
        letter.SaveAs filePath & SyndNo & "_Draft Letter.docx", 12 ' wdFormatXMLDocument对应值为12
        
        ' 关闭当前生成的文档
        letter.Close
        
    Next i
    
    ' 退出Word程序
    WordApp.Quit
    Set WordApp = Nothing
    
    Sheets("Details").Select
    MsgBox "Letters have been produced."
    
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

关键修改说明

  • 补全原代码中缺失的打开模板文档步骤,原代码直接使用letter对象但未初始化,会导致报错
  • 新增secondDoc对象用于打开要复制内容的Word文档,复制其全部内容后粘贴到主文档末尾
  • 将循环范围改为9 To 9 + TemplateNo - 1,只处理有数据的行,避免无效循环
  • 显式使用Word格式常量的数值(12对应wdFormatXMLDocument),避免未引用Word库时的报错
  • 恢复Application.ScreenUpdating和Application.DisplayAlerts的默认状态,避免影响后续操作

使用注意事项

  1. 将代码中的"你的带书签模板路径.docx"替换为实际的模板文件完整路径
  2. 将"需要复制内容的Word文档路径.docx"替换为要追加内容的Word文件完整路径
  3. 确保filePath指向的保存目录已存在,否则会报错

内容的提问来源于stack exchange,提问作者Sean Harrison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:32:40