ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 按照分节符拆分word文档求助高人

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-25 17:23 | 显示全部楼层 |阅读模式
Sub test()
   Dim mySec As Section, i As Long, myDoc As Document, SourceDoc As Document
   Set SourceDoc = ActiveDocument
   For Each mySec In SourceDoc.Sections
      If mySec.PageSetup.SectionStart = wdSectionNewPage And mySec.Index > 1 Then
         Set myDoc = Application.Documents.Add
         myDoc.Content.FormattedText = SourceDoc.Range(i, mySec.Range.Start - 1)
         myDoc.Content.Sections.Last.PageSetup.SectionStart = _
                  SourceDoc.Range(i, mySec.Range.Start - 1).Sections.Last.PageSetup.SectionStart
         i = mySec.Range.Start
      End If
      If mySec.Index = SourceDoc.Sections.Count Then
         Set myDoc = Application.Documents.Add
         myDoc.Content.FormattedText = SourceDoc.Range(i, SourceDoc.Content.End)
         myDoc.Content.Sections.Last.PageSetup.SectionStart = _
                  SourceDoc.Range(i, SourceDoc.Content.End).Sections.Last.PageSetup.SectionStart
      End If
   
   Next
End Sub
求帮忙的这个可以按照节拆分 但是不能自动保存  求高人改改 保存在打开的文件夹中 谢谢了

数据.rar

15.67 KB, 下载次数: 33

TA的精华主题

TA的得分主题

发表于 2013-4-30 10:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
标记一下,哪位高人解决?

TA的精华主题

TA的得分主题

发表于 2013-5-2 13:49 | 显示全部楼层
Sub test()
   Dim mySec As Section, i As Long, myDoc As Document, SourceDoc As Document
   Set SourceDoc = ActiveDocument
   ii = 0
   For Each mySec In SourceDoc.Sections
      If mySec.PageSetup.SectionStart = wdSectionNewPage And mySec.Index > 1 Then
         Set myDoc = Application.Documents.Add
         myDoc.Content.FormattedText = SourceDoc.Range(i, mySec.Range.Start - 1)
         myDoc.Content.Sections.Last.PageSetup.SectionStart = _
                  SourceDoc.Range(i, mySec.Range.Start - 1).Sections.Last.PageSetup.SectionStart
         i = mySec.Range.Start
   myDoc.SaveAs "c:\" & "分节" & ii & ".doc"
   myDoc.Close True
      End If
      If mySec.Index = SourceDoc.Sections.Count Then
         Set myDoc = Application.Documents.Add
         myDoc.Content.FormattedText = SourceDoc.Range(i, SourceDoc.Content.End)
         myDoc.Content.Sections.Last.PageSetup.SectionStart = _
                  SourceDoc.Range(i, SourceDoc.Content.End).Sections.Last.PageSetup.SectionStart
   myDoc.SaveAs "c:\" & "分节" & ii & ".doc"
   myDoc.Close True
      End If
Debug.Print ii
      ii = ii + 1
   Next
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-5-2 14:10 | 显示全部楼层
测试了一下,好像少了一节,能否用每一节的第一行来保存呢?

TA的精华主题

TA的得分主题

发表于 2013-5-2 15:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
上面方法太繁琐了,用简单的点的吧:
Sub 按节保存()
Dim s As Section
    For Each s In ActiveDocument.Sections
    aa = ActiveDocument.Name
        s.Range.Copy
        Documents.Add.Content.Paste
        Dim i As Paragraph
        For Each i In ActiveDocument.Content.Paragraphs
        If Len(i.Range.Sentences(1)) > 2 Then
        sa = i.Range.Sentences(1)
        Exit For
        End If
        Next
        Selection.EndKey wdStory
        Selection.MoveLeft wdCharacter, 1
        Selection.Delete
        ActiveDocument.SaveAs "c:\" & sa & ".doc"
        ActiveDocument.Close True
    Next
End Sub

TA的精华主题

TA的得分主题

发表于 2014-4-10 14:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhanglei1371 发表于 2013-5-2 13:49
Sub test()
   Dim mySec As Section, i As Long, myDoc As Document, SourceDoc As Document
   Set Sou ...

你好。试了一下果然好用,但是唯一不好的就是存出来是2003版 的,现在都用2010版的。高手能否修改一下呢?谢谢

TA的精华主题

TA的得分主题

发表于 2014-4-10 20:58 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-7-9 14:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-7-9 14:53 | 显示全部楼层
比如,这样将每一节保存为节号,当然你可以保存为每一节的名字,自己改代码
Sub 按节保存()
Dim asection As Section
Dim folderPath As String
Dim k As Integer

k = 1
Set doc = ActiveDocument
folderPath = ActiveDocument.Path

For Each asection In doc.Sections
    asection.Range.Copy
    Set newdoc = Documents.Add
    newdoc.Content.Paste
    newdoc.SaveAs folderPath & "\" & CStr(k) & ".docx"
    newdoc.Close True
    k = k + 1
Next asection
End Sub

TA的精华主题

TA的得分主题

发表于 2018-7-9 15:39 | 显示全部楼层
本帖最后由 dogingate 于 2018-7-9 15:41 编辑

刚好要用,就改了下,供参考
Sub 按节保存()
Dim asection As Section
Dim folderPath As String
Dim fileName As String
Dim sectionCount As Integer
Dim k As Integer

Set doc = ActiveDocument
folderPath = ActiveDocument.Path

sectionCount = doc.Sections.Count

For k = 1 To sectionCount - 1
   
    Set asection = doc.Sections(k)
    asection.Range.Select
    Selection.Copy
    Set newdoc = Documents.Add
    newdoc.Content.Paste
   
    ys = k Mod 2
    If ys <> 0 Then
        fileName = Trim(asection.Range.Paragraphs(1).Range)
        fileName = Left(fileName, Len(fileName) - 1)
    Else
        fileName = fileName & "桥梁资料卡"
    End If
   
    newdoc.SaveAs folderPath & "\" & fileName & ".docx"
   
    newdoc.Close True
   
Next k
End Sub

按节拆分.zip

546 Bytes, 下载次数: 42

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 22:47 , Processed in 0.026987 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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