首页 > 其他分享 >“自动化魔法:一键为多个Word文档设置连续页码“

“自动化魔法:一键为多个Word文档设置连续页码“

时间:2024-07-09 20:26:40浏览次数:14  
标签:Dim Word 一键 文件夹 文档 设置 End 页码

引言

在处理多个Word文档时,我们经常需要对这些文档进行连续页码设置,以便于打印和分发。手动设置每个文档的页码不仅耗时,而且容易出错。为了解决这个问题,我编写了一个VBA宏,它可以自动为一个文件夹中的所有Word文档设置连续的页码。本文将详细介绍这个宏的工作原理和使用方法。

宏的功能

这个VBA宏的主要功能是:

  • 允许用户选择一个文件夹,宏将遍历该文件夹中的所有Word文档(.docx格式)。
  • 按该文件夹下的文档顺序,为每个文档设置连续的页码,确保文档之间没有页码重复且页码不中断。
  • 通过一个辅助函数获取每个文档的总页数,并根据此信息更新下一个文档的起始页码。
  • 通过一个辅助函数为每个文档第一节设置起始页码,后续节为续前节,且不影响原始页脚。

宏的实现

以下是宏的代码实现,包括两个辅助函数和一个主过程。

主过程:a设置连续页码并遍历文档

Sub a设置连续页码并遍历文档()
    ' 定义变量用于存储文件夹路径
    Dim strFolderPath As String
    ' 创建FileSystemObject对象,用于操作文件系统
    Dim objFSO As Object
    ' 定义变量用于存储文件夹对象
    Dim objFolder As Object
    ' 定义变量用于存储文件对象
    Dim objFile As Object
    ' 定义变量用于存储Word文档对象
    Dim objDoc As Document
    ' 定义变量用于存储当前页码
    Dim iCurrentPage As Integer
    ' 定义变量用于存储文档的总页数
    Dim iTotalPages As Integer
    ' 定义变量用于存储之前文档的总页数,以便设置连续页码
    Dim iPreviousTotal As Integer

    ' 创建FileSystemObject对象
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    ' 使用文件选择对话框让用户选择文件夹
    With Application.FileDialog(msoFileDialogFolderPicker)
        ' 如果用户选择了文件夹
        If .Show = -1 Then
            ' 存储选择的文件夹路径
            strFolderPath = .SelectedItems(1) & "\"
        Else
            ' 如果用户取消选择,则显示消息框并退出宏
            MsgBox "未选择文件夹,操作已取消。"
            Exit Sub
        End If
    End With

    ' 根据用户选择的路径获取文件夹对象
    Set objFolder = objFSO.GetFolder(strFolderPath)

    ' 初始化当前页码为1
    iCurrentPage = 1

    ' 遍历文件夹中的所有.docx文件
    For Each objFile In objFolder.Files
        ' 检查文件扩展名是否为docx
        If LCase(objFSO.GetExtensionName(objFile.Name)) = "docx" Then
            ' 打开文档,不显示界面
            Set objDoc = Documents.Open(objFile.Path, Visible:=False)

            ' 调用宏设置页码,传入当前页码
            Call e自动前节设置(objDoc, iCurrentPage)

            ' 调用辅助函数获取当前文档的总页数
            iTotalPages = GetTotalPages(objDoc)

            ' 更新当前页码为下一个文档的起始页码
            iPreviousTotal = iCurrentPage
            iCurrentPage = iTotalPages + iPreviousTotal

            ' 保存并关闭文档
            objDoc.Close SaveChanges:=True
        End If
    Next objFile

    ' 显示消息框,告知用户所有文档的页码设置完成
    MsgBox "所有文档的页码设置完成。"
End Sub

辅助函数:GetTotalPages

' 辅助函数,用于获取文档的总页数
Function GetTotalPages(ByRef oDoc As Document) As Integer
    ' 获取当前文档的总页数,返回给调用者
    GetTotalPages = oDoc.Windows(1).Panes(1).Pages.Count
End Function

辅助函数:e自动前节设置

' 辅助函数,用于设置文档的页码
Sub e自动前节设置(ByRef oDoc As Document, ByRef iStartingPage As Integer)
    Dim oSection As Section
    For Each oSection In oDoc.Sections
        If oSection.Index = 1 Then
            With oSection.Footers(wdHeaderFooterPrimary).PageNumbers
                .NumberStyle = wdPageNumberStyleArabic
                .RestartNumberingAtSection = True
                .StartingNumber = iStartingPage
            End With
        Else
            With oSection.Footers(wdHeaderFooterPrimary).PageNumbers
                .RestartNumberingAtSection = False
            End With
        End If
    Next oSection
End Sub

使用方法

  1. 打开Word,按下 Alt + F11 打开VBA编辑器。
  2. 插入一个新的模块,并将上述代码粘贴进去。
  3. 运行宏 a设置连续页码并遍历文档
  4. 选择包含Word文档的文件夹。
  5. 宏将自动为每个文档设置连续页码,并在完成后弹出提示消息。

完整代码

Sub a设置连续页码并遍历文档()
    ' 定义变量用于存储文件夹路径
    Dim strFolderPath As String
    ' 创建FileSystemObject对象,用于操作文件系统
    Dim objFSO As Object
    ' 定义变量用于存储文件夹对象
    Dim objFolder As Object
    ' 定义变量用于存储文件对象
    Dim objFile As Object
    ' 定义变量用于存储Word文档对象
    Dim objDoc As Document
    ' 定义变量用于存储当前页码
    Dim iCurrentPage As Integer
    ' 定义变量用于存储文档的总页数
    Dim iTotalPages As Integer
    ' 定义变量用于存储之前文档的总页数,以便设置连续页码
    Dim iPreviousTotal As Integer

    ' 创建FileSystemObject对象
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    ' 使用文件选择对话框让用户选择文件夹
    With Application.FileDialog(msoFileDialogFolderPicker)
        ' 如果用户选择了文件夹
        If .Show = -1 Then
            ' 存储选择的文件夹路径
            strFolderPath = .SelectedItems(1) & "\"
        Else
            ' 如果用户取消选择,则显示消息框并退出宏
            MsgBox "未选择文件夹,操作已取消。"
            Exit Sub
        End If
    End With

    ' 根据用户选择的路径获取文件夹对象
    Set objFolder = objFSO.GetFolder(strFolderPath)

    ' 初始化当前页码为1
    iCurrentPage = 1

    ' 遍历文件夹中的所有.docx文件
    For Each objFile In objFolder.Files
        ' 检查文件扩展名是否为docx
        If LCase(objFSO.GetExtensionName(objFile.Name)) = "docx" Then
            ' 打开文档,不显示界面
            Set objDoc = Documents.Open(objFile.Path, Visible:=False)

            ' 调用宏设置页码,传入当前页码
            Call e自动前节设置(objDoc, iCurrentPage)

            ' 调用辅助函数获取当前文档的总页数
            iTotalPages = GetTotalPages(objDoc)

            ' 更新当前页码为下一个文档的起始页码
            iPreviousTotal = iCurrentPage
            iCurrentPage = iTotalPages + iPreviousTotal

            ' 保存并关闭文档
            objDoc.Close SaveChanges:=True
        End If
    Next objFile

    ' 显示消息框,告知用户所有文档的页码设置完成
    MsgBox "所有文档的页码设置完成。"
End Sub

' 辅助函数,用于获取文档的总页数
Function GetTotalPages(ByRef oDoc As Document) As Integer
    ' 获取当前文档的总页数,返回给调用者
    GetTotalPages = oDoc.Windows(1).Panes(1).Pages.Count
End Function

' 辅助函数,用于设置文档的页码
Sub e自动前节设置(ByRef oDoc As Document, ByRef iStartingPage As Integer)
    ' 定义变量用于存储文档节对象
    Dim oSection As Section
    ' 遍历文档的所有节
    For Each oSection In oDoc.Sections
        ' 如果是第一个节,则设置页码样式和起始页码
        If oSection.Index = 1 Then
            With oSection.Footers(wdHeaderFooterPrimary).PageNumbers
                ' 设置页码样式为阿拉伯数字
                .NumberStyle = wdPageNumberStyleArabic
                ' 设置在该节重新开始页码编号
                .RestartNumberingAtSection = True
                ' 设置起始页码
                .StartingNumber = iStartingPage
            End With
        Else
            ' 对于其他节,不重新开始页码编号
            With oSection.Footers(wdHeaderFooterPrimary).PageNumbers
                .RestartNumberingAtSection = False
            End With
        End If
    Next oSection
End Sub

注意事项

  • 确保所有文档都是Word文档(.docx格式)。
  • 宏在设置页码时不会更改文档的内容。
  • 如果文件夹中包含非Word文档,宏将忽略这些文件。

结语

通过使用这个VBA宏,你可以轻松地为多个Word文档设置连续页码,大大提高工作效率。希望这个宏对你有所帮助,如果你有任何问题或建议,请在评论区告诉我。

标签:Dim,Word,一键,文件夹,文档,设置,End,页码
From: https://blog.csdn.net/m0_63692467/article/details/140303548

相关文章

  • 使用资源编排 ROS 轻松部署单点网站——以 WordPress 为例
    介绍WordPress是一款免费开源的网站内容管理系统(CMS),它可以帮助用户简单快捷地创建和管理自己的网站,包括博客、新闻网站、电子商务网站、社交网络等等。WordPress有丰富的主题和插件库,使得用户可以轻松地为网站定制外观和功能。WordPress的易用性和可扩展性使其成为世界上最受欢......
  • 【Python】Word文档操作
     一、全文替换不是创建word文档写入内容,而是基于现有的Word文档进行替换处理使用run.text直接赋值修改发现样式会丢失,而网上大部分办法都是这么写的...直到我看到这篇文章的评论:https://blog.csdn.net/qq_40222956/article/details/106098464 除了段落替换后,Word文档......
  • 一键发票重复检测,收藏!
    在财务管理和税务申报中,确保发票的唯一性和准确性是至关重要的一环。然而,随着企业业务量的增加,发票数量急剧上升,手动检查发票是否重复变得既耗时又容易出错。为了解决这一难题,票格子推出了高效的发票重复检测功能,帮助企业轻松实现发票管理的自动化与精准化。以下是对该功能......
  • 腾讯云篇7、手动搭建 WordPress 个人站点(Linux)
    操作场景WordPress是一款使用PHP语言开发的博客平台,您可使用通过WordPress搭建属于个人的博客平台。本文以CentOS7.6操作系统的腾讯云云服务器为例,手动搭建WordPress个人站点。示例软件版本本文搭建的WordPress个人站点组成版本及说明如下:Linux:Linux操作系统,......
  • c#winfrom+ffmpeg视频一键自动化剪辑批量生成视频软件(一)
    简单介绍一下1,设置字幕字体内容2,视频素材库自定义文件夹3,视频背景音乐库4,一键全自动配置剪辑,多选背景音乐,多选字体字幕样式,无限批量生成视频数量个数设置。我历时一个月开发了一套全新的视频批量剪辑软件,结合了C#WinForms和FFmpeg技术,旨在提供一种简单而功能强大的解决方案......
  • 哪些方法可以将word导出为pdf格式?
    在日常工作和学习中,我们经常需要将Word文档转换为PDF格式,以便更好地保存、分享和打印文件。PDF格式具有跨平台兼容性好、不易被篡改等优点,因此得到了广泛应用。那么Word如何转PDF呢?本文将介绍三种实用的word转pdf的方法,帮助读者轻松实现文档格式的转换。方法一:使用Word软件自带的......
  • Kutools for Word v9.0学习版下载
    概述KutoolsforWordv9.0是一款功能强大的MicrosoftWord插件,旨在提高用户的工作效率和文档处理能力,是Word用户的得力助手。主要功能:增强功能:为Word添加了300多个高级功能,大大扩展了Word的基础功能。界面集成:完美集成到Word界面中,使用起来自然流畅。文档管理......
  • WebOffice在线编微软Offfice,并以二进制流的形式打开Word文档
    在日常办公场景中,我们经常会遇到这种场景:我们的合同管理系统的各种Word,excel,ppt数据都是以二进制数组的形式存储在数据库中,如何从数据库中读取二进制数据,以二进制数据作为参数,然后加载到浏览器的Office窗口,实现在线编辑Office的功能呢?猿大师办公助手是猿大师旗下的一款在浏览器......
  • 使用zdppy_api+onlyoffice word文档在线共同编辑,附完整的vue3前端代码和python后端代
    参考文档:https://api.onlyoffice.com/zh/editors/basichttps://api.onlyoffice.com/zh/editors/coedit基本的架构思考:文档表:记录的是文档信息key:这个key可以标识唯一的一个文档,可以是文档的hash值fileType:文档的类型,docx,txt,pdf,其他title:文档的标题,也就是文档的实际......
  • LVGL一键打包图片工具,全部图片打包成一个bin文件,支持nor flash XIP模式下直接访问数据
    最近做工程项目,需要用到LVGL,但是搜了很长时间没有看到合适的图片打包工具,大多都是生成数组或者单个的bin文件,这样烧录到norflash很麻烦后来看到一篇博客,博主的想法与我类似,不过他后面部分就做的麻烦了,所以,我直接从头写了一个工具,他的博客地址:https://www.wpgdadatong.com.cn/blo......