|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 loquat 于 2016-6-25 20:38 编辑
针对此类问题,我也写了一个比较复杂的,可以去批量调用
发现这个代码远没有我下面写的代码那么简单,目前发现在分割位置遇到表格时以下代码处理会有问题。
单个文件调用方式如下:
- Sub callItYourOwn()
- SplitEveryFewPagesAsDocuments ActiveDocument, 5
- End Sub
复制代码
多个文件调用方式如下:
假设arr里存储的是你待处理的word文件列表
- Sub callItYourOwn()
- Dim aDoc As Document
- For i = LBound(arr) To UBound(arr)
- Set aDoc = Documents.Open(arr)
- SplitEveryFewPagesAsDocuments arr(i), 5
- Next
- End Sub
复制代码
'主程序代码如下:
- Sub SplitEveryFewPagesAsDocuments(ByVal aDoc As Document, ByVal splitPages&)
- Application.ScreenUpdating = False
- Dim aPageCount&, aSplitTimes&, i&
- Dim aStart&, aEnd&, aFilePath$, aFileName$
- Dim aRange As Range, wdApp As Word.Application
- Set wdApp = GetObject(, "Word.Application")
- aPageCount = aDoc.ComputeStatistics(wdStatisticPages) '获取目标文档的页数
- If aPageCount <= splitPages Then Exit Sub '目标文档页数少于分割页数,则退出
- aFilePath = aDoc.Path '获取文件路径
- aFileName = Left(aDoc.Name, InStrRev(aDoc.Name, ".doc") - 1) '获取文件名
- If Dir(aFilePath & "" & aFileName, vbDirectory) = "" Then '如果以目标文件名为名称的文件夹不存在
- MkDir aFilePath & "" & aFileName '则新建该文件夹
- End If
- Set aRange = aDoc.Range(0, 0) '对象初始化,排除光标移动
- aSplitTimes = -Int(-(aPageCount / splitPages)) '分割后的文档份数
- For i = 1 To aSplitTimes
- aStart = aRange.GoTo(wdGoToPage, wdGoToAbsolute, i * splitPages).Start '分割页起始位置
- If i = aSplitTimes Then
- aEnd = aDoc.Content.End - 1
- Else
- aEnd = aRange.GoTo(wdGoToPage, wdGoToAbsolute, (i + 1) * splitPages).Start - 1
- End If
- Set aRange = aDoc.Range(aStart, aEnd)
- Do While InStr(1, "11121314", Asc(Right(aRange.Text, 1))) '去掉末尾的所有占位符,换行符,分页符,自动换行符,分栏符,分节符
- aRange.MoveEnd 1, -1
- Loop
- aRange.Copy
- With wdApp.Documents.add
- .Content.Text = ""
- .Content.Paste
- .SaveAs aFilePath & "" & aFileName & "" & aFileName & "_" & format(i, "000") & Mid(aDoc.Name, InStrRev(aDoc.Name, ".doc"))
- .Close False
- End With
- Next i
- If aDoc.FullName = ActiveDocument.FullName Then
- Exit Sub '如果是在处理当前文档,直接退出程序
- Else
- aDoc.Close False '否则,关闭文档,且不保存退出
- End If
- MsgBox "已完成!!!"
- Application.ScreenUpdating = False
- End Sub
复制代码 |
|