Word·VBA文档合并

目录

之前的文章《Word·VBA实现邮件合并》虽然可以生成邮件合并文档结果,但是不能像《python实现word邮件合并》一样,最终所有结果合并为1个文档,那么只能用vba实现文档合并功能

  • 以下代码在Word启用宏的文档中运行

1,复制法,不保留原文档格式

Range.InsertAfter 方法只能插入文本,因此合并结果不保留原文档格式

vbnet 复制代码
Sub 合并文档_复制法()
    '合并文件夹中所有doc*文档,并保存文档至该文件夹;但不保留原文档格式
    Dim file_path$, file_name$, docx As Document, f As Document
'--------------------参数填写:
    file_path = "E:\测试\docx\结果\"  '文件夹
    file_name = Dir(file_path & "*.doc*"): tm = Timer
    Set docx = Documents.Add    '新建文档,合并文档
    Application.ScreenUpdating = False  '关闭屏幕更新,加快程序运行
    Do While file_name <> ""
        Set f = Documents.Open(file_path & file_name)
        docx.Content.InsertAfter f.Content  '将文档内容复制到合并文档末尾
        f.Close (False)
        file_name = Dir  '下一个文件名
    Loop
    docx.SaveAs FileName:=file_path & "合并文档.docx"  '保存
    docx.Close
    Application.ScreenUpdating = True
    Debug.Print "文件夹文档合并完成,用时:" & Format(Timer - tm, "0.00")  '耗时
End Sub
  • 合并结果

2,复制法,保留原文档格式

rng.Paste偶尔运行报错,原因未知

vbnet 复制代码
Sub 合并文档_复制法2()
    '合并文件夹中所有doc*文档,并保存文档至该文件夹;保留原文档格式
    Dim file_path$, file_name$, docx As Document, f As Document, rng As Range
'--------------------参数填写:
    file_path = "E:\测试\docx\结果\"  '文件夹
    file_name = Dir(file_path & "*.doc*"): tm = Timer
    Set docx = Documents.Add    '新建文档,合并文档
    Application.ScreenUpdating = False  '关闭屏幕更新,加快程序运行
    Do While file_name <> ""
        Set f = Documents.Open(file_path & file_name)
        Set rng = f.Content: rng.Copy
        Set rng = docx.Content
        rng.Collapse Direction:=wdCollapseEnd  '结束位置
        rng.Paste: rng.InsertAfter Chr(12)     '粘贴,并插入换页符
        f.Close (False)
        file_name = Dir  '下一个文件名
    Loop
    docx.SaveAs FileName:=file_path & "合并文档.docx"  '保存
    docx.Close
    Application.ScreenUpdating = True
    Debug.Print "文件夹文档合并完成,用时:" & Format(Timer - tm, "0.00")  '耗时
End Sub
  • 合并结果

3,插入法,保留原文档格式

Selection.InsertFile 方法插入指定文件

vbnet 复制代码
Sub 合并文档_插入法()
    '合并文件夹中所有doc*文档,并保存文档至该文件夹;保留原文档格式
    Dim file_path$, file_name$, docx As Document
'--------------------参数填写:
    file_path = "E:\测试\docx\结果\"  '文件夹
    file_name = Dir(file_path & "*.doc*"): tm = Timer
    Set docx = Documents.Add    '新建文档,合并文档
    Application.ScreenUpdating = False  '关闭屏幕更新,加快程序运行
    Do While file_name <> ""
        Selection.InsertFile FileName:=file_path & file_name, Link:=False  '所有文档
        Selection.InsertBreak Type:=wdPageBreak  '插入换页符
        file_name = Dir  '下一个文件名
    Loop
    docx.SaveAs FileName:=file_path & "合并文档.docx"  '保存
    docx.Close
    Application.ScreenUpdating = True
    Debug.Print "文件夹文档合并完成,用时:" & Format(Timer - tm, "0.00")  '耗时
End Sub
  • 合并结果:与方法2一致
  • 3种方法对比
文档合并 方法1 方法2 方法3
耗时秒数 4.41 5.48 0.61
  • 方法3不但生成结果与方法2一致,而且代码运行速度快数倍
相关推荐
brian00311 天前
word插件,像wps一样双击放大图片
word·wps·双击放大图片
DFT计算杂谈1 天前
LaTeX 格式公式复制至 Word 并快捷转换操作
word
weixin_416660072 天前
千问回答转 Word 后,表格和公式是真能编辑,还是看起来像?
word·markdown·千问
ratel️2 天前
小墨析 · Office Agent 日常办公不烧心
python·langchain·word·excel·fastapi·js·ppt
MetaEnchanter2 天前
PDF 转 Word:只改其中几页,不用整份重新整理
pdf·word
麦序子3 天前
用 Python + python-docx 批量生成带表格样式的装修报价单 Word 文档(含合计公式)
开发语言·python·自然语言处理·word·python3.11
ms365copilot3 天前
我不再自己做 Word、Excel 和 PPT 了,我让 Copilot 直接帮我创建 (1)
word·powerpoint·excel·copilot
2501_930707783 天前
使用C#代码在 Word 中插入或删除分节符
word
wangchunyu1143 天前
JAVA AQS与Lock实现原理(含CAS)
java·开发语言·word
开开心心_Every4 天前
免费压缩软件WinRAR无弹窗、广告干扰
java·开发语言·前端·spring·智能手机·word·winrar