ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] word中的一页自动生成一个文件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-10-12 22:43 | 显示全部楼层 |阅读模式
请教一下各位高手,如何在WORD中,让每一页自动生成一个文件,文件名为每一页的第一行,并存在指定的目录。

TA的精华主题

TA的得分主题

发表于 2010-10-13 08:06 | 显示全部楼层
这个得用VBA解决吧。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-13 09:50 | 显示全部楼层
原帖由 fengbin7506 于 2010-10-13 08:06 发表
这个得用VBA解决吧。

怎么解决,谢谢!

TA的精华主题

TA的得分主题

发表于 2010-10-13 21:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

首先感谢“守柔”大师

这个是“守柔”大师的杰作,稍微“润色”了一下
务必讲代码将代码粘贴于活动文档的“THISDOCUMENT”模块中才能运行哦

还有一个就是每页的首行不能为及文档命名系统不允许的符号

Sub shouroude()
Dim PageCount As Integer, StartRange As Long, EndRange As Long, MyRange As Range, Fn As String, MyDoc As Document
On Error Resume Next
PageCount = Selection.Information(wdNumberOfPagesInDocument)
Range(0, 0).Select '将光标移至文档起点
For i = 1 To PageCount '设置循环次数
    StartRange = Selection.Start '取得该页的第一个字符位置
    Selection.EndKey Unit:=wdLine '将光标移动到该页首行的最后位置
     Fn = Range(StartRange, Selection.End - 1) '-1的目的是防止该页首行含有段落标记,导致出错.
        If i = PageCount Then '如果循环到达最后一页
        EndRange = ActiveDocument.Content.End '将文档最后位置赋值于EndRange
        Else
        Selection.GoToNext (wdGoToPage) '否则,将下一页的起始位置赋值于EndRange(等同于本页的最后位置)
        EndRange = Selection.Start - 1
        End If
    Set MyRange = Range(StartRange, EndRange) '将本页中的内容进行复制
    MyRange.Copy
    Set MyDoc = Documents.Add '新建一空白文档
    MyDoc.Range(0, 0).Paste '在文档开始处粘贴
    MyDoc.SaveAs FileName:=Fn    '保存文档名
    MyDoc.Close '关闭文档
Next
    MsgBox "操作完毕!" & vbCrLf & "请到“我的文档”文件夹查看!!", vbInformation
End Sub

将拆分的文档存放在当前文件夹不知怎样修改代码

[ 本帖最后由 szqhb 于 2010-10-14 09:51 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-10-14 06:51 | 显示全部楼层
原帖由 lan_yu 于 2010-10-12 22:43 发表
请教一下各位高手,如何在WORD中,让每一页自动生成一个文件,文件名为每一页的第一行,并存在指定的目录。


楼主如果对于VBA不熟悉,可以考虑使用《守柔Word文档切割机》。
请参考此链接:
http://www.rousoft.com.cn/product_content.asp?ArticleID=168

TA的精华主题

TA的得分主题

发表于 2010-10-14 07:12 | 显示全部楼层
守柔Word文档切割机和那个排版的我想要,在哪里啊

TA的精华主题

TA的得分主题

发表于 2010-10-14 16:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 nimenhao 于 2010-10-14 07:12 发表
守柔Word文档切割机和那个排版的我想要,在哪里啊

请参考:
http://shop57134256.taobao.com/

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-15 09:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 szqhb 于 2010-10-13 21:54 发表
这个是“守柔”大师的杰作,稍微“润色”了一下
务必讲代码将代码粘贴于活动文档的“THISDOCUMENT”模块中才能运行哦

还有一个就是每页的首行不能为空及文档命名系统不允许的符号

Sub shouroude()
Dim PageC ...

非常感谢szqhb 的热心帮助!如果存在两页或多页存为一个文档,因为一个单位(即标题)有多页的情况。谢谢!

TA的精华主题

TA的得分主题

发表于 2010-10-15 11:40 | 显示全部楼层
原帖由 lan_yu 于 2010-10-15 09:21 发表

非常感谢szqhb 的热心帮助!如果存在两页或多页存为一个文档,因为一个单位(即标题)有多页的情况。谢谢!

不太懂你现在所述的意思,你的要求就是每页存为一个文档啊
如果你是以标题为标志来拆分也是可以的,每个标题必须是统一的字体字号,Home中有相关的例子,自己搜索一下看看
下面是以各标题为二号宋体来拆分的代码

Sub 拆分Word()
Dim myDoc As Document, mytitle As String, a As String, i As Byte
Dim lngStart As Long, lngEnd As Long, myStart As Long, n As Integer
Application.ScreenUpdating = False
Set myDoc = ActiveDocument
myDoc.ActiveWindow.WindowState = wdWindowStateMinimize
a = "\/:*?""<>|"
With myDoc.Content.Find
    .ClearFormatting
    .Font.Name = "宋体"   '各独立小文档标题字体
    .Font.Size = 22  '各独立小文档标题字号,22号即二号字体
    .Format = True
    Do While .Execute
        n = n + 1
        With .Parent
            lngStart = .Start
            lngEnd = .Paragraphs(1).Range.End
            .MoveUntil Chr(13), wdBackward
            If n > 1 Then
                Documents.Add.Content.FormattedText = myDoc.Range(IIf(n = 2, 0, myStart), .Start).FormattedText
                ActiveDocument.SaveAs myDoc.Path & "\" & mytitle & ".doc"
                'ActiveDocument.SaveAs Replace(myDoc.FullName, ".doc", "") & "_" & n - 1 & ".doc"
                ActiveDocument.Close
            End If
            mytitle = Trim(myDoc.Range(lngStart, lngEnd - 1).Text)
            For i = 1 To Len(a)
                mytitle = Replace(mytitle, Mid(a, i, 1), "")
            Next
            myStart = .Start
            .SetRange lngEnd, lngEnd
        End With
    Loop
    If n > 1 Then
        Documents.Add.Content.FormattedText = myDoc.Range(myStart, myDoc.Content.End).FormattedText
        ActiveDocument.SaveAs myDoc.Path & "\" & mytitle & ".doc"
        'ActiveDocument.SaveAs Replace(myDoc.FullName, ".doc", "") & "_" & n & ".doc"
        ActiveDocument.Close
    End If
End With
Application.ScreenUpdating = True
myDoc.ActiveWindow.WindowState = wdWindowStateNormal
MsgBox IIf(n > 1, "已将活动文档拆分并另存为" & n & "个小文档。", "活动文档不具备指定的拆分条件。")
End Sub

[ 本帖最后由 szqhb 于 2010-10-19 23:55 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-19 20:57 | 显示全部楼层
原帖由 szqhb 于 2010-10-15 11:40 发表

不太懂你现在所述的意思,你的要求就是每页存为一个文档啊
如果你是以标题为标志来拆分也是可以的,每个标题必须是统一的字体字号,Home中有相关的例子,自己搜索一下看看
下面是以各标题为二号宋体来拆分的代码 ...

非常感谢!就是要达到您这个结果。但这段代码运行后无法拆分,总是显示“活动文档不具备指定的拆分条件”,请教一下怎么解决!

[ 本帖最后由 lan_yu 于 2010-10-19 21:10 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 07:34 , Processed in 0.031713 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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