ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3170|回复: 13

[求助] word合并文档,如何按文件名递增顺序合并?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-4-10 11:05 | 显示全部楼层 |阅读模式
本帖最后由 sblisb 于 2019-4-28 15:56 编辑

使用如下代码合并,有两个问题
1、怎么没有按文件名的顺序从大到小来合并呀?文件名为“表352100101”,表352100102....,如何按递增来合并每个文件?
2、每个文件合并时,每个文件要另起一页,文件尾如何插入一个分页符来分开另一个文件?
Sub HB()
Dim p$, f$, w As Object
    Application.Visible = False
    Set w = ActiveDocument
    p = w.Path & "\"
    Selection.WholeStory
    Selection.Delete Unit:=wdCharacter, Count:=1
    f = Dir(p & "*.doc")
    Do While f <> ""
        If f <> w.Name Then
            With Documents.Open(p & f)
                Selection.WholeStory
                Selection.Copy
                w.Activate
                Selection.PasteAndFormat (wdPasteDefault)
                .Close
            End With
        End If
        f = Dir
    Loop
    Application.Visible = True
End Sub
test.zip (56.26 KB, 下载次数: 11)


TA的精华主题

TA的得分主题

发表于 2019-4-10 11:59 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-10 14:23 | 显示全部楼层

谢谢,代码怎么是图片呀,能提供文字版吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-10 14:48 | 显示全部楼层

Sub HBDoc()
Dim mDocument As Document
Dim NewDocument As Document
Dim mFile$, mPath$, Q%
'----------------------

Set mDocument = ActiveDocument
Application.Visible = False
mDocument.Content.Text = ""
mPath = mDocument.Path & "\"
'-------------------------

mFile = Dir(mPath & "*.doc")
    Do While mFile <> ""
        If mFile <> mDocument.Name Then
        Q = Q + 1
        Set NewDocument = Documents.Open(mPath & mFile)
        NewDocument.Content.Copy


         With mDocument
        .Activate
            If Q > 1 Then .Paragraphs.Last.Range.InsertBefore Chr(12)    '????????
            .Range(.Content.End - 1, .Content.End).Select
             Selection.PasteAndFormat (wdPasteDefault)
            End With
         NewDocument.Close
        End If
    mFile = Dir
    Loop
Application.Visible = True
End Sub

TA的精华主题

TA的得分主题

发表于 2019-4-10 14:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sblisb 发表于 2019-4-10 14:23
谢谢,代码怎么是图片呀,能提供文字版吗?

写完了随手就关了忘记保存了。没有存根 不好意思了

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-28 15:56 | 显示全部楼层

再次求助一下
文件名变成汉字在后数字在前,如35010403001(表).docx,35010403003(表).docx,
要按从大到小合并,如何改代码?

TA的精华主题

TA的得分主题

发表于 2019-4-29 00:33 | 显示全部楼层
楼主,请备份原文件后,试用下面的宏(合并后第1页的“分页符”请自行删除;合并后文档并未存盘,请自行保存/存盘;合并后请检查是否正确,不正确请等待各位高人相助。我不敢保证是否正确。双击文件夹直到进入最终所需要打开的文件夹后按确定):
  1. Sub test批量合并()
  2. 'code by 捷克人
  3.     On Error Resume Next
  4.     Dim fd As FileDialog, p$, doc As Document, n&
  5.     Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  6.     If fd.Show = -1 Then p = fd.SelectedItems(1) Else End
  7.     Set fd = Nothing
  8.     If MsgBox("是否处理文件夹 " & p & " ?", 4 + 48) = vbNo Then End
  9.     Documents.Add
  10.     Dim FileNameWithPath As Variant, ListOfFilenamesWithParh As New Collection
  11.     Call FileSearchByHavrda(ListOfFilenamesWithParh, p, "*.docx", True)
  12.     For Each FileNameWithPath In ListOfFilenamesWithParh
  13.         Set doc = Documents.Open(FileName:=FileNameWithPath)
  14.         With doc
  15.                 .Content.Copy
  16.                 .Close
  17.                 With Selection
  18.                     .EndKey 6
  19.                     .InsertBreak Type:=wdPageBreak
  20.                     .Paste
  21.                 End With
  22.                 ActiveDocument.Characters(1).Copy
  23.         End With
  24.         n = n + 1
  25.     Next FileNameWithPath
  26.     If ListOfFilenamesWithParh.Count = 0 Then MsgBox "File not found!"
  27.     MsgBox "处理完毕!共处理 " & n & " 个文档!", 0 + 48
  28. End Sub
  29. Sub FileSearchByHavrda(pFoundFiles As Collection, pPath As String, pMask As String, pIncludeSubdirectories As Boolean)
  30.     Dim DirFile As String, CollectionItem As Variant, SubDirCollection As New Collection
  31.     pPath = Trim(pPath)
  32.     If Right(pPath, 1) <> "" Then pPath = pPath & ""
  33.     DirFile = Dir(pPath & pMask)
  34.     Do While DirFile <> ""
  35.         pFoundFiles.Add pPath & DirFile
  36.         DirFile = Dir
  37.     Loop
  38.     If Not pIncludeSubdirectories Then Exit Sub
  39.     DirFile = Dir(pPath & "*", vbDirectory)
  40.     Do While DirFile <> ""
  41.         If DirFile <> "." And DirFile <> ".." Then If ((GetAttr(pPath & DirFile) And vbDirectory) = 16) Then SubDirCollection.Add pPath & DirFile
  42.         DirFile = Dir
  43.     Loop
  44.     For Each CollectionItem In SubDirCollection
  45.          Call FileSearchByHavrda(pFoundFiles, CStr(CollectionItem), pMask, pIncludeSubdirectories)
  46.     Next
  47. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-29 17:16 | 显示全部楼层
413191246se 发表于 2019-4-29 00:33
楼主,请备份原文件后,试用下面的宏(合并后第1页的“分页符”请自行删除;合并后文档并未存盘,请自行保 ...

谢谢!
选中指定文件夹,怎么提示File not found呀
扩展名为docx或doc都不行呀

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-29 17:35 | 显示全部楼层
本帖最后由 sblisb 于 2019-4-30 11:29 编辑
413191246se 发表于 2019-4-29 00:33
楼主,请备份原文件后,试用下面的宏(合并后第1页的“分页符”请自行删除;合并后文档并未存盘,请自行保 ...

请测试
合并word.zip (263.99 KB, 下载次数: 31)



TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-30 09:40 | 显示全部楼层
本帖最后由 sblisb 于 2019-4-30 11:28 编辑
413191246se 发表于 2019-4-29 00:33
楼主,请备份原文件后,试用下面的宏(合并后第1页的“分页符”请自行删除;合并后文档并未存盘,请自行保 ...

发现是路径少了个/,添加后可以找到文件了
但运行后,宏是新建word文件,所以页面格式不一样,导致复制的文件和原来的页面不一样
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-11 07:04 , Processed in 0.029726 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表