ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]【急】用宏按页拆分出错

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-1-23 13:15 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

我用下面的语句进行按页拆分WORD文档,执行之后生成很多WORD文档,并且只拆分了一个,其他文档都是空的。

麻烦看看是不是代码错了。谢谢。

代码:

  Sub   SplitDocument()  
  '  
  '   将文档按页拆分为多个文档  
  '   第一页保留在原文档中,以后的页保存在新的文档中  
  '   需要指定的参数:savefilename   新文档的保存路径和文件名前缀  
  '                                   pagecount         文档的总页数  
  '  
          Dim   SaveFileName$  
          SaveFileName   =   "c:\zj"     '设置文件保存的路径和文件名,这里为c:\zj*.doc,*为页码序号  
           
          Dim   PageCount&,   i&  
          PageCount   =   9               '输入总页数,这里假设为2页  
           
          For   i   =   2   To   PageCount  
                  Selection.GoTo   What:=wdGoToPage,   Which:=wdGoToNext,   Name:="2"   '定位页(光标会自动停在页的第一行)
                  Selection.Find.ClearFormatting  
                  Selection.EndKey   Unit:=wdStory,   Extend:=wdExtend    '全选文档某一页的所有内容
                  Selection.Cut  
                  Documents.Add   DocumentType:=wdNewBlankDocument  
                  Selection.PasteAndFormat   (wdPasteDefault)  
                  '如果只新建不保存,就删除此句  
                  ActiveDocument.SaveAs   FileName:=SaveFileName   &   i   &   ".doc",   FileFormat:=   _  
                          wdFormatDocument,   LockComments:=False,   Password:="",   AddToRecentFiles:=   _  
                          True,   WritePassword:="",   ReadOnlyRecommended:=False,   EmbedTrueTypeFonts:=   _  
                          False,   SaveNativePictureFormat:=False,   SaveFormsData:=False,   _  
                          SaveAsAOCELetter:=False  
          Next  
  End   Sub  

TA的精华主题

TA的得分主题

发表于 2007-1-23 14:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
没有错吧,请注意设置pagecount数和你文档实际页数相等试试。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-23 14:14 | 显示全部楼层
QUOTE:
以下是引用c81在2007-1-23 14:07:56的发言:
没有错吧,请注意设置pagecount数和你文档实际页数相等试试。

试过了,还是一样,我用的WORD2003。

这对版本有没有要求啊。

你能不能试一下。

TA的精华主题

TA的得分主题

发表于 2007-1-23 16:17 | 显示全部楼层
上述代码漏洞很多,请楼主详细说明你的意图。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-23 16:27 | 显示全部楼层
QUOTE:
以下是引用守柔在2007-1-23 16:17:16的发言:
上述代码漏洞很多,请楼主详细说明你的意图。

谢谢守柔。

我结合你之前的程序,修改了一下,终于可以完成我的需求——按页拆分WORD文档。

麻烦你帮忙看一下还有没有什么需要改正的(呵呵,其实很多是你的程序)。谢谢。

Sub SaveAsPage()
Dim PageCount As Integer, StartRange As Long, EndRange As Long, MyRange As Range, Fn As String, MyDoc As Document

Dim SaveFileName$
          SaveFileName = "c:\zj"         '设置文件保存的路径和文件名,这里为c:\zj*.doc,*为页码序号

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
End If
 
Set MyRange = Range(StartRange, EndRange) '将本页中的内容进行复制
  MyRange.Copy
  Set MyDoc = Documents.Add '新建一空白文档
  MyDoc.Range(0, 0).Paste '在文档开始处粘贴

  ActiveDocument.SaveAs FileName:=SaveFileName & i & ".doc", FileFormat:= _
                          wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
                          True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
                          False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
                          SaveAsAOCELetter:=False
 
  MyDoc.Close '关闭文档
  Next
End Sub

TA的精华主题

TA的得分主题

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

这是很久以前的贴子了,我修正一下:

Sub SaveAsPage()
    Dim PageCount As Integer, StartRange As Long, EndRange As Long, MyRange As Range, Fn As String, MyDoc As Document
    Dim SaveFileName$
    SaveFileName = "c:\zj"         '
设置文件保存的路径和文件名,这里为c:\zj*.doc,*为页码序号

    On Error Resume Next
    PageCount = Selection.Information(wdNumberOfPagesInDocument)
   ThisDocument.Range(0, 0).Select    '
将光标移至文档起点
    For i = 1 To PageCount    '
设置循环次数
        StartRange = Selection.Start    '
取得该页的第一个字符位置
        Selection.EndKey Unit:=wdLine    '
将光标移动到该页首行的最后位置
        Fn = ThisDocument.Range(StartRange, Selection.End - 1)    '-1
的目的是防止该页首行含有段落标记,导致出错.
        If i = PageCount Then    '
如果循环到达最后一页

            EndRange = ThisDocument.Content.End    '
将文档最后位置赋值于EndRange
        Else
            Selection.GoToNext (wdGoToPage)    '
否则,将下一页的起始位置赋值于EndRange(等同于本页的最后位置
)
            EndRange = Selection.Start
        End If
        Set MyRange = ThisDocument.Range(StartRange, EndRange)    '
将本页中的内容进行复制

        MyRange.Copy
        Set MyDoc = Documents.Add    '
新建一空白文档
        MyDoc.Range(0, 0).Paste    '
在文档开始处粘贴
        ActiveDocument.SaveAs FileName:=SaveFileName & i & ".doc", FileFormat:= _
                              wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
                              True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
                              False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
                              SaveAsAOCELetter:=False
        MyDoc.Close    '
关闭文档
    Next
End Sub
'----------------------

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-23 19:06 | 显示全部楼层

好的,非常感谢。

这样就能解决我的问题了。呵呵

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

本版积分规则

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

GMT+8, 2024-11-17 12:52 , Processed in 0.033729 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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