ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何将一个word多页文档拆分为多个单页文档保存

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-3-4 09:42 | 显示全部楼层 |阅读模式
求助高手!!!!!如何将一个word多页文档拆分为多个单页文档保存???

TA的精华主题

TA的得分主题

发表于 2010-3-4 10:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub 分页保存为新文档()
    '分页保存,适用于WORD97及其以上版本
    Dim objShell As Object, objFolder As Object, strNameLenth As Integer
    Dim mySelection As Selection, myfolder As String, myArray() As String
    Dim ThisDoc As Document, myDoc As Document, strName As String, n As Integer
    Dim myRange As Range, PageString As String, pgOrientation As WdOrientation
    Dim sinLeft As Single, sinRight As Single, sinTop As Single, sinBottom As Single
    Dim ErrChar() As Variant, ochar As Variant, sinStart As Single, sinEnd As Single
    Const myMsgTitle As String = "ExcelHome_ShouRou"
    Dim vbYN As VbMsgBoxResult
    sinStart = Timer
    On Error GoTo errhandle    '设置错误处理
    '创建一个Shell.Application对象
    Set objShell = CreateObject("Shell.Application")
    '取得文件夹浏览器
    Set objFolder = objShell.BrowseForFolder(0, "请选择一个文件夹", 0, 0)
    If objFolder Is Nothing Then Exit Sub
    myfolder = objFolder.Self.Path & "\"
    Set objFolder = Nothing: Set objShell = Nothing
    Set ThisDoc = ActiveDocument    '定义一个Document对象,以利用本程序作为加载宏
    Set mySelection = ThisDoc.ActiveWindow.Selection
    '文件自动命名时必须规避的字符
    ErrChar = Array("\", "/", ":", "*", "?", """", "<", ">", "|")
    '一些特列字符
    For n = 0 To 31
        ReDim Preserve ErrChar(UBound(ErrChar) + 1)
        ErrChar(UBound(ErrChar)) = Chr(n)
    Next
    strNameLenth = Val(VBA.InputBox(Prompt:="请输入您需要设置的文件名长度,0或者取消将自动命名!", Title:=myMsgTitle, Default:=10))
    If strNameLenth > 255 Then strNameLenth = 0
    vbYN = MsgBox("是否需要处理页尾的分隔符(分页符/分节符)?它可能会影响文档结构.", vbYesNo + vbInformation + vbDefaultButton2, myMsgTitle)
    Application.ScreenUpdating = False    '关闭屏幕更新
    '在文档的每页中循环
    For n = 1 To mySelection.Information(wdNumberOfPagesInDocument)
        mySelection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=n
        Set myRange = ThisDoc.Bookmarks("\PAGE").Range
        If vbYN = vbYes And VBA.Asc(myRange.Characters.Last.Text) = 12 Then _
           myRange.SetRange myRange.Start, myRange.End - 1
        '取得一个以段落标记为分隔符的一维数组
        myArray = VBA.Split(myRange.Text, Chr(13))
        '将所有文本合并为一个字符串
        PageString = VBA.Join(myArray, "")
        '取得文档中每节的页面设置
        With myRange.Sections(1).PageSetup
            sinLeft = .LeftMargin    '左页边距
            sinRight = .RightMargin    '右页边距
            sinTop = .TopMargin    '上边距
            sinBottom = .BottomMargin    '下边距
            pgOrientation = .Orientation    '纸张方向
        End With
        For Each ochar In ErrChar    '进行一系列替换,即删除无效字符
            PageString = VBA.Replace(PageString, ochar, "")
        Next
        If strNameLenth = 0 Then
            strName = ThisDoc.Name
            strName = VBA.Replace(LCase(strName), ".doc", "")
            strName = strName & "_" & n
        Else
            strName = VBA.Left(PageString, strNameLenth)    '取得文件名
            If strName = "" Then
                strName = ThisDoc.Name
                strName = VBA.Replace(LCase(strName), ".doc", "")
                strName = strName & "_" & n
            End If
        End If
        strName = strName & ".doc"
        myRange.Copy    '复制
        Set myDoc = Documents.Add(Visible:=True)    '新建一个隐藏的空白文档
        With myDoc
            With .Content
                .Paste    '粘贴
                .Paragraphs.Last.Range.Delete    '删除最后一个段落标记
                With .Find
                    .ClearFormatting
                    .Text = "^b"
                    .Replacement.ClearFormatting
                    .Replacement.Text = ""
                    .Execute Replace:=2
                End With
            End With
            With .PageSetup    '进行页面设置
                .Orientation = pgOrientation
                .LeftMargin = sinLeft
                .RightMargin = sinRight
                .TopMargin = sinTop
                .BottomMargin = sinBottom
            End With
            '如果有相同的文档,则自动命名
            If VBA.Dir(myfolder & strName, vbDirectory) <> "" Then strName = "Page_" & n & ".doc"
            .SaveAs myfolder & strName    '另存为
            .Close    '关闭文档
        End With
    Next
    ThisDoc.Characters(1).Copy    '变相清空剪贴板
    Application.ScreenUpdating = True    '恢复屏幕更新
    sinEnd = Timer    '取得代码运行结束的时间
    If MsgBox("分页保存结束,用时:" & sinEnd - sinStart & _
              "秒,是否打开指定文件夹查看分页保存后的文档情况?", vbYesNo, myMsgTitle) = vbYes Then _
       ThisDoc.FollowHyperlink myfolder
    Exit Sub
errhandle:
    MsgBox "错误号:" & Err.Number & vbLf & "出错原因:" & Err.Description, myMsgTitle
    Err.Clear
    Application.ScreenUpdating = True    '恢复屏幕更新
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-3-4 12:39 | 显示全部楼层

回复 2楼 tangqingfu 的帖子

运行时错误'13',类型不匹配   
这是怎么回事啊??

TA的精华主题

TA的得分主题

发表于 2010-3-4 13:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-3-4 14:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-10-20 15:25 | 显示全部楼层
二楼的代码运行时和三楼一样的故障,请教怎么解决!

TA的精华主题

TA的得分主题

发表于 2010-10-21 16:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本人测试成功。会不会跟文档里有图片、表格、格式一类的东西有关系啊

TA的精华主题

TA的得分主题

发表于 2011-12-6 16:20 | 显示全部楼层
本帖最后由 再生之夏 于 2011-12-6 16:21 编辑

我测试也是最后出现那个错误,~~~~~~~~~~·并且无图,五相片,等,全是文字和符合

TA的精华主题

TA的得分主题

发表于 2011-12-6 16:21 | 显示全部楼层
本帖最后由 再生之夏 于 2011-12-6 16:22 编辑
tangqingfu 发表于 2010-3-4 10:45
Sub 分页保存为新文档()
    '分页保存,适用于WORD97及其以上版本
    Dim objShell As Object, objFolde ...

错误,文档内只有文字和符号,和别人一样的错误,生成的文档部分没内容   

运行时错误'13',类型不匹配

TA的精华主题

TA的得分主题

发表于 2011-12-7 08:29 | 显示全部楼层
我又选用几个文档试了一下,都能拆分成功啊!!!

tang,如果要每2页、每3页……拆分一个文档,需要修改哪部份代码????
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 06:54 , Processed in 0.028517 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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