ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 当前WORD每页生成一个文档

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-3-30 18:30 | 显示全部楼层 |阅读模式
当前WORD每页生成一个文档

这个里面的代码,可以将一个WORD文档的每页生成一个新的文档,但唯一的不足就是,导出的文档不能保持原文件的格式。

请朋友们,在这个基础上把这个功能加上好吧,谢谢大家了!

当前WORD每页生成一个文档.rar (9.26 KB, 下载次数: 72)

TA的精华主题

TA的得分主题

发表于 2014-3-30 19:30 | 显示全部楼层
保持格式最好的办法是将其“图形化”,比如转换为pdf文件——如果能接受的话,这将很简单:

首先,使用pdf虚拟打印机把word文档整体转换为pdf文档,
然后,使用PDFSpliter软件将所得的pdf文档拆分为单页pdf文档即可。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-3-30 19:38 | 显示全部楼层
cbtaja 发表于 2014-3-30 19:30
保持格式最好的办法是将其“图形化”,比如转换为pdf文件——如果能接受的话,这将很简单:

首先,使用p ...

PDF固然能保持不变的格式,

但,想导出的文档想进行编辑又是一个问题

所在还是想,导出以WORD的形式,并保持原文件格式。

希望大侠们能帮帮忙!

TA的精华主题

TA的得分主题

发表于 2014-3-30 21:50 | 显示全部楼层
我的想法是,将文件复制若干份,然后按照顺序,每份删除的只剩下一页就好了。

TA的精华主题

TA的得分主题

发表于 2014-4-8 21:56 | 显示全部楼层
利用Copy和Paste会完成这个例题。
注意的是本人没写任何错误处理(生成两次就会报错),运行程序后,在所在文档会生成一个拆分文件夹,里面就是被拆分的文件。

  1. Sub 分割文档()
  2. Dim PageCount As Integer, SavePath As String
  3. PageCount = ActiveDocument.Content.Information(wdNumberOfPagesInDocument)
  4. SavePath = ActiveDocument.Path & "\拆分"
  5. MkDir SavePath
  6. Selection.SetRange 0, 0
  7. Dim tmpDoc As Document, e&
  8. For e = 1 To PageCount
  9.     Selection.Bookmarks("\page").Select
  10.     Selection.Copy
  11.     Set tmpDoc = Documents.Add
  12.     tmpDoc.Range.Paste
  13.     tmpDoc.SaveAs SavePath & "\第" & CStr(e) & "页"
  14.     tmpDoc.Close
  15.     Selection.GoToNext wdGoToPage
  16. Next
  17. End Sub
复制代码
另外关于Selection的选择还有一些其它的办法,可以搜一下老帖。我这种办法不用IF语句。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-4-9 00:21 | 显示全部楼层
本帖最后由 loquat 于 2014-4-9 00:27 编辑

使用Selection对象时,如不关闭屏幕刷新,将会至少降低一倍效率。
以下不使用Selection对象
  1. Sub 分割文档()
  2. Application.ScreenUpdating = False
  3. Dim PageCount&, SavePath$
  4. Dim oStart&, oEnd&, aPage&
  5. PageCount = ThisDocument.ComputeStatistics(wdStatisticPages)
  6. SavePath = ThisDocument.Path & "\拆分"
  7. MkDir SavePath
  8. For aPage = 1 To PageCount
  9.     oStart = .GoTo(wdGoToPage, wdGoToAbsolute, aPage).Start
  10.     oEnd = .GoTo(wdGoToPage, wdGoToAbsolute, aPage + 1).Start
  11.     aDoc.Range(oStart, oEnd).Copy
  12.     With Documents.Add
  13.         .Range.Paste
  14.         .SaveAs SavePath & "\第" & CStr(i) & "页"
  15.         .Close
  16.     End With
  17. Next
  18. Application.ScreenUpdating = True
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-9 08:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-4-9 17:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
loquat 发表于 2014-4-9 00:21
使用Selection对象时,如不关闭屏幕刷新,将会至少降低一倍效率。
以下不使用Selection对象

运行,出现编译错误的提示。

TA的精华主题

TA的得分主题

发表于 2014-4-9 21:26 | 显示全部楼层
看似简单的代码写起来还是蛮复杂的,容错还是没有写完。。。
  1. Sub 分割文档()
  2. Application.ScreenUpdating = False
  3. Dim PageCount&, SavePath$, aPage&, specialStr$
  4. Dim oStart&, oEnd&, aDoc As Document
  5. Set aDoc = ThisDocument
  6. PageCount = aDoc.ComputeStatistics(wdStatisticPages)    '获取总页数
  7. SavePath = aDoc.Path & "\拆分"                          '保存目录
  8. If Dir(SavePath, vbDirectory) = "" Then MkDir SavePath  '如果目录不存在就建立目录
  9. For aPage = 1 To PageCount                              '循环处理所有页
  10.     oStart = aDoc.GoTo(wdGoToPage, wdGoToAbsolute, aPage).Start    '本页页首坐标
  11.     If aPage < PageCount Then
  12.         oEnd = aDoc.GoTo(wdGoToPage, wdGoToAbsolute, aPage + 1).Start  '次页页首坐标
  13.     Else
  14.         oEnd = aDoc.Content.End
  15.     End If
  16.     specailStr = Chr(11) & Chr(12) & Chr(13) & Chr(14) '页尾特殊字符列表
  17.     If InStr(1, specialStr, aDoc.Range(oEnd - 1, oEnd).Text, vbBinaryCompare) <> 0 Then  '页尾是特殊字符时
  18.         oEnd = oEnd - 1                                '坐标向前移动一位
  19.     End If
  20.     aDoc.Range(oStart, oEnd).Copy                  '复制页内容
  21.     With Documents.Add                                 '新建文档,粘贴,另存
  22.         .Range.Paste
  23.         .SaveAs SavePath & "\第" & CStr(aPage) & "页"
  24.         .Close
  25.     End With
  26. Next
  27. Application.ScreenUpdating = True
  28. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-9 21:38 | 显示全部楼层
loquat 发表于 2014-4-9 21:26
看似简单的代码写起来还是蛮复杂的,容错还是没有写完。。。

感谢朋友的耐心解答,如果能解决,导出的页有空白页就更好了,如本例中第三页就有一个空白,不过,已经很好了,感谢朋友!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 18:41 , Processed in 0.059017 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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