【源代码】Word VBA按任意页拆分文档
具体需求
每2页拆分一下Word文档
通用代码
思路:遍历文档所有页,隔几页开始挨着复制每页内容,复制到新的文档中。
Sub SplitPagesAsDocuments()Dim oSrcDoc As Document, oNewDoc As DocumentDim strSrcName As String, strNewName As StringDim oRange As RangeDim nIndex As Integer, nSubIndex As Integer, nTotalPages As Integer, nBound As IntegerDim fso As ObjectConst nSteps = 2 ' 修改这里控制每隔几页分割一次Set fso = CreateObject("Scripting.FileSystemObject")Set oSrcDoc = ActiveDocumentSet oRange = oSrcDoc.ContentnTotalPages = ActiveDocument.Content.Information(wdNumberOfPagesInDocument)'利用Information属性获取活动文档中的总页码wdCollapseStartoRange.Select'光标定位到文档开头For nIndex = 1 To nTotalPages Step nStepsSet oNewDoc = Documents.AddIf nIndex + nSteps > nTotalPages ThennBound = nTotalPagesElsenBound = nIndex + nSteps - 1End IfFor nSubIndex = nIndex To nBound '循环复制范围中的每页内容oSrcDoc.Activate'对当前页复制oSrcDoc.Windows(1).Activate= wdBrowsePageApplication.Browser.NextoNewDoc.ActivateoNewDoc.Windows(1).Selection.PastewdStorywdCharacter, -1'为了避免拆分后有多余的空白页,向前删除1个位置Next nSubIndexstrSrcName = oSrcDoc.FullNamestrNewName = fso.BuildPath(fso.GetParentFolderName(strSrcName), _& "_" & (nIndex \ nSteps + 1) & "." & fso.GetExtensionName(strSrcName))strNewNameFalseNext nIndexSet oNewDoc = NothingSet oRange = NothingSet oSrcDoc = NothingSet fso = NothingMsgBox "结束!"End Sub
知识点
Information属性
◎作用:
'返回有关指定的所选内容或区域的信息。
◎用法:
表达式.Information(Type)
'Type代表WdInformation,必需。消息类型。具体含义查帮助
◎案例:
'获取当前页码和总页码。
Sub 获取当前页码和总页码()MsgBox Selection.Information(wdActiveEndPageNumber)MsgBox Selection.Information(wdNumberOfPagesInDocument)End Sub
'判断光标是否位于表格中
Sub 判断光标是否位于表格中()If Selection.Information(wdWithInTable) = True ThenMsgBox "光标位于表格中"ElseMsgBox "光标不位于表格中"End IfEnd Sub

EndKey方法
一般结合Slection。用Selection.EndKey 。
◎作用:
'将选定内容移动或扩展到指定单位的末尾。
◎用法:
表达式.EndKey(Unit, Extend)
'Unit 可选参数 移动或扩展选定内容时基于的单位。可以是 WdUnits 常量之一。默认值为 wdLine。
'可以是下列 WdUnits 常量之一:
'wdStory
'wdColumn
'wdLine
'wdRow 默认值是 wdLine
'Extend 可选参数 指定移动所选内容的方式。可以是任意 WdMovementType 常量。
'如果该参数值为 wdMove,则所选内容折叠到一个插入点中并移至指定单位的末尾。如果该参数值为 wdExtend,则所选内容的末尾扩展到指定单位的末尾,默认值为 wdMove。
◎案例:
'向文章开头写入内容。
Sub 向文章开头写入内容()ActiveDocument.Range(0, 0).SelectSelection.TypeText "这是文章开头"Selection.homekey wdStorySelection.TypeText "这是文章开头"End Sub
'向文章末尾写入内容
Sub 向文章末尾写入内容()ActiveDocument.Range(ActiveDocument.Range.End - 1, ActiveDocument.Range.End).SelectSelection.TypeText "这是文章末尾"Selection.EndKey wdStorySelection.TypeText "这是文章开头"End Sub

更多WordVBA知识,详见《WordVBA精讲课》
评论
