ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助:如何将一个多页的word文档按页批量生成新的单个文件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-2-2 23:11 | 显示全部楼层
* 楼主,附件文档第一段落首行有缩进并非居中,请改正之。
* 请打开要拆分的文档试用下面的宏:(此宏可能不适合有表格的文档!拆分结果请见"D:\TextSplit")
  1. Sub TextSplit()
  2.     Dim doc As Document, i&, p&, s&, t$, j&, k$, y$, x$
  3.     With ActiveDocument
  4.         y = .FullName
  5.         p = .ComputeStatistics(wdStatisticPages)
  6.         k = (Split(y, ".")(1))
  7.         Do
  8.             i = i + 1
  9.             With Selection
  10.                 .GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=i + 1
  11.                 If Asc(.Previous) <> 12 Then .InsertBreak Type:=wdSectionBreakNextPage
  12.             End With
  13.         Loop Until i = p - 1
  14.         s = .Sections.Count
  15.     End With
  16.     Do
  17.         Set doc = ActiveDocument
  18.         With doc
  19.             j = j + 1
  20.             .Sections(j).Range.Select
  21.             If j = s Then
  22.                 .Range(Start:=0, End:=Selection.Start).Delete
  23.             Else
  24.                 .Range(Start:=Selection.End, End:=.Content.End).Delete
  25.                 If j > 1 Then .Range(Start:=0, End:=Selection.Start).Delete
  26.             End If
  27.             .Content.Find.Execute "^b", , , 0, , , , , , "", 2
  28.             Do While .Paragraphs.Last.Range.Text = vbCr
  29.                 .Paragraphs.Last.Range.Delete
  30.             Loop
  31.             Selection.HomeKey 6
  32.             ActiveWindow.ActivePane.View.Zoom.PageFit = wdPageFitBestFit
  33.             If Len(Dir("D:\TextSplit", 16)) = 0 Then MkDir "D:\TextSplit"
  34.             x = .Paragraphs(3).Range.Text
  35.             x = Replace(x, vbCr, "")
  36.             If k = "docx" Then
  37.                 .SaveAs2 FileName:="D:\TextSplit" & "" & x & ".docx", FileFormat:=wdFormatXMLDocument
  38.             Else
  39.                 .SaveAs2 FileName:="D:\TextSplit" & "" & x & ".doc", FileFormat:=wdFormatDocument
  40.             End If
  41.             .Close
  42.             If j = s Then Exit Do
  43.             Documents.Open FileName:=y
  44.         End With
  45.     Loop
  46.     t = "D:\TextSplit"
  47.     MsgBox "Completed!" & vbCr & "Save Path - " & t, 0 + 48
  48. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-5 15:04 | 显示全部楼层
413191246se 发表于 2021-2-2 23:11
* 楼主,附件文档第一段落首行有缩进并非居中,请改正之。
* 请打开要拆分的文档试用下面的宏:(此宏可能 ...

谢谢!!!!!!!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-10 17:54 | 显示全部楼层
wangqh8203 发表于 2021-2-2 20:35
论坛里有个高手写过一段代码,可以根据邮件合并每份单独保存文件。
Sub myMailMerge()
'按邮件合并每个记 ...

谢谢,已解决。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-10 17:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2021-2-2 23:11
* 楼主,附件文档第一段落首行有缩进并非居中,请改正之。
* 请打开要拆分的文档试用下面的宏:(此宏可能 ...

谢谢,已解决。

TA的精华主题

TA的得分主题

发表于 2021-2-11 00:42 | 显示全部楼层
我来凑个热闹 练练手
  1. Sub 按交办函拆分()
  2.     Dim p As Paragraph
  3.     Dim doc As Document
  4.     Dim folderPath, fileName
  5.     folderPath = ActiveDocument.Path & Application.PathSeparator
  6.     For Each p In ActiveDocument.Paragraphs
  7.         If InStr(p.Range.Text, "[2021]第") > 0 Then
  8.             fileName = Left(p.Range.Text, Len(p.Range.Text) - 1) & ".docx"
  9.             Debug.Print fileName
  10.             p.Range.Select
  11.             Selection.MoveStart wdParagraph, -2
  12.             Selection.MoveEnd wdParagraph, 7
  13.             Selection.Copy
  14.             
  15.             Set doc = Documents.Add
  16.             doc.Activate
  17.             Selection.Paste
  18.             
  19.             doc.SaveAs2 folderPath & fileName
  20.             doc.Close True
  21.             
  22.             'Stop
  23.         End If
  24.     Next
  25.     Set p = Nothing
  26.     Set doc = Nothing
  27. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2021-2-11 10:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼上朋友,你好!试用了你的宏,结果正确!但也有几点建议:1、p、doc 不是对象,有必要释放吗?2、个别语句是不需要的,如“debug”,我没看有什么显示,当然我也不知道它是干什么的;还有已经另存为了,直接 close 即可,不必 true。3、新建文档后,直接就是活动文档了,就不必激活了。4、会用 .MoveStart/.MoveEnd,这很不错!5、文档拆分,我个人认为,还是有“节”(Section)时比较好,因为可以保持格式;复制/粘贴可能不会保持格式。谢谢!

TA的精华主题

TA的得分主题

发表于 2021-2-11 16:35 来自手机 | 显示全部楼层
413191246se 发表于 2021-2-11 10:43
楼上朋友,你好!试用了你的宏,结果正确!但也有几点建议:1、p、doc 不是对象,有必要释放吗?2、个别语 ...

谢谢指导,我对word对象模型,方法都不是很熟悉。但是p和doc为什么不是对象?

TA的精华主题

TA的得分主题

发表于 2021-2-11 21:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼上朋友,你好!p/doc 是不是对象,真不清楚。可能是我说错了,但没必要释放吧!因为从未见人这么做过,似乎没必要。

TA的精华主题

TA的得分主题

发表于 2021-2-11 22:32 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2021-2-11 21:55
楼上朋友,你好!p/doc 是不是对象,真不清楚。可能是我说错了,但没必要释放吧!因为从未见人这么做过,似 ...

我无言以对,但是向你学习

TA的精华主题

TA的得分主题

发表于 2021-2-12 13:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
朋友,新年快乐!我也向你学习!(有些我也不知道是对象不是对象,反正,我就是会用,经常用。)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 00:44 , Processed in 0.035724 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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