【word】使用VBA代码,自定义页面数拆分大Word文件为多个小文档并指定名称保存

1 篇文章 0 订阅

使用VBA代码,自定义页面数拆分大Word文件为多个小文档并指定名称保存

alt+F11打开开发选项-->选择【插入】-->【模块】-->弹出代码编辑窗口,插入下面代码,按照需要修改页数和要重命名的每个文档按顺序的名字--->按F5运行代码,文档最后就生成在当前目录下了

在word的某些版本上可能出现格式不对,最后测试在最新的wps上跑效果最好

Option Explicit
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub SplitEveryFivePagesAsDocuments()
On Error GoTo Errorhandler
Dim oSrcDoc As Document, oNewDoc As Document
Dim nameArray As Variant

Dim strSrcName As String, strNewName As String
Dim oRange As Range
Dim nIndex As Integer, nSubIndex As Integer, nTotalPages As Integer, nBound As Integer
Dim fso As Object
Const nSteps = 4                          '设置多少页分割一次
nameArray = Array("Cat", "Dog", "Rabbit") '数组内容修改为需要的命名

Set fso = CreateObject("Scripting.FileSystemObject")
Set oSrcDoc = ActiveDocument
Set oRange = oSrcDoc.Content

nTotalPages =Val(ActiveDocument.BuiltInDocumentProperties(wdPropertyPages))
oRange.Collapse wdCollapseStart
oRange.Select
For nIndex = 1 To nTotalPages Step nSteps

    If nIndex + nSteps > nTotalPages Then
        nBound = nTotalPages
    Else
        nBound = nIndex + nSteps - 1
    End If

    Set oNewDoc = Documents.Add
    For nSubIndex = nIndex To nBound
        oSrcDoc.Activate
        oSrcDoc.Bookmarks("\page").Range.Copy
        oSrcDoc.Windows(1).Activate
        Application.Browser.Target = wdBrowsePage
        Application.Browser.Next
        Sleep 10
        oNewDoc.Activate
        oNewDoc.Windows(1).Selection.Paste
        Errorhandler:
            If Err = 4605 Then
                oNewDoc.Windows(1).Selection.Paste
            Else
                Resume Next
            End If
    MsgBox "nSubIndex" & "_" & nSubIndex
    Next nSubIndex
    strSrcName = oSrcDoc.FullName
    strNewName = fso.BuildPath(fso.GetParentFolderName(strSrcName), _
    fso.GetBaseName(strSrcName) & "_" & nameArray(nIndex\nSteps) & "." & fso.GetExtensionName(strSrcName))
    oNewDoc.SaveAs strNewName
    oNewDoc.Close False

MsgBox nameArray(nIndex\nSteps)
Next nIndex
Set oNewDoc = Nothing
Set oRange = Nothing
Set oSrcDoc = Nothing
Set fso = Nothing
MsgBox "结束!"
End Sub

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
公司各种系统需要各式各样的导入模板,需要快速的制作模板另存为特定的工作簿,工作簿的命名要求一定的格式:年月日时分+区分标识。 在vb中array() 函用于创建组,表示返回一个包含组的 Variant。在vb中array() 函用于创建组,表示返回一个包含组的 Variant。通常用Array组函选定指定多个工作表: Worksheets(Array("清单信息")).Copy 复制问题解决后,使用saveas解决另存为的问题。在代码中用format函取现在的时间,VBA 的 Format 函与工作表函 TEXT 用法基本相同,但功能更加强大,许多格式只能用于VBA 的 Format 函,而不能用于工作表函 TEXT 。 Format(Now, "yyyymmddhhmm") 把format函嵌套进 saveas 代码中,即可实现工作簿命名自动取当前的时间,必要是可以加下后缀,避免工作簿名称重复。format函取到分钟即可。不过在一分钟内不要再点另存为,否则工作簿名称重复。另存为后活动工作簿为新的工作簿。想返回原来工作簿的童鞋们可以用Activate返回指定的工作表。这样做代码,即高效又避免工作簿名称杂乱无章。 公司各种系统需要各式各样的导入模板,需要快速的制作模板另存为特定的工作簿,工作簿的命名要求一定的格式:年月日时分+区分标识。 在vb中array() 函用于创建组,表示返回一个包含组的 Variant。在vb中array() 函用于创建组,表示返回一个包含组的 Variant。通常用Array组函选定指定多个工作表: Worksheets(Array("清单信息")).Copy 复制问题解决后,使用saveas解决另存为的问题。在代码中用format函取现在的时间,VBA 的 Format 函与工作表函 TEXT 用法基本相同,但功能更加强大,许多格式只能用于VBA 的 Format 函,而不能用于工作表函 TEXT 。 Format(Now, "yyyymmddhhmm") 把format函嵌套进 saveas 代码中,即可实现工作簿命名自动取当前的时间,必要是可以加下后缀,避免工作簿名称重复。format函取到分钟即可。不过在一分钟内不要再点另存为,否则工作簿名称重复。另存为后活动工作簿为新的工作簿。想返回原来工作簿的童鞋们可以用Activate返回指定的工作表。这样做代码,即高效又避免工作簿名称杂乱无章。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值