玖叶教程网

前端编程开发入门

使用VBA批量打印word文档(excel vba批量打印)

最近需要批量打印巨量word文档,在网上找了很多教程,都不好用。问题主要集中在无法设置打印机的属性,因此自己研究了一个方法来批量打印word文档。


如果需要同时打印多份word文档,通常情况下,可以同时选中这些文件,然后点击鼠标右键,点击打印,即可同时打印多份文档。但是这样做有个问题在于,无法对打印机进行设置,比如设置打印单面/双面,或者纸张横向纵向等参数。

这里采用“曲线救国”的方式,使用VBA和pdf合并器对多份word文档进行打印。

主要分为两大步骤:

  1. 将需要打印的word文档先批量转换为pdf格式的文件
  2. 把这些pdf合并到同一个pdf中

最后只需要打印合成的这份pdf文件即可。

第一步 批量将word文档转为pdf格式的文件

使用VBA程序将word文档批量转为pdf,操作步骤如下:

  1. 随便打开一个word,按快捷键 Alt+F11 弹出“Microsoft Visual Basic for Applications”,即VBA编辑窗体。
  2. 点击菜单栏的 “插入”-“模块”
  1. 将下面的代码复制到编辑区域中:

将代码中的文件夹路径改成自己存放需要打印的word文档的文件夹路径,然后按F5运行程序即可。这段代码会将下面设置的文件夹中所有的word文档转成pdf文件,同时保存在该文件夹里。

Sub BatchConvertDocToPDF()
    Dim folderPath As String
    Dim docFile As String
    Dim doc As Document
    Dim pdfPath As String

    ' 设置文件夹路径
    folderPath = "D:\downloads\"      ' 将这里更改为你的word文档所在文件夹路径,路径最后必须包含 \ 符号!

    ' 获取文件夹中的第一个 Word 文档
    docFile = Dir(folderPath & "*.doc*")

    ' 循环遍历文件夹中的所有 Word 文档
    Do While docFile <> ""
        ' 打开文档
        Set doc = Documents.Open(folderPath & docFile)

        ' 设置 PDF 文件路径
        pdfPath = folderPath & Left(docFile, InStrRev(docFile, ".") - 1) & ".pdf"

        ' 保存为 PDF
        doc.SaveAs2 pdfPath, wdFormatPDF

        ' 关闭文档,不保存更改
        doc.Close SaveChanges:=wdDoNotSaveChanges

        ' 获取下一个文件
        docFile = Dir
    Loop

    MsgBox "所有文档已转换为PDF!"
End Sub


第二步 将生成的pdf合并成同一个pdf文件

这一步方式较多,可以在网上找在线的pdf合并工具,也可以下载pdf的处理软件来处理。

在线版的推荐smallpdf:

软件推荐: PDFXEdit 软件,可以在网上搜到便携破解版的资源。

PDFXEdit软件合并pdf:点击菜单栏的“转换”-“从文件”-“合并文件为单个PDF”,选择相应的pdf即可合并。


得到合并后的pdf文档,最后打印这一个文档即可!

双面打印的处理

最后,如果是双面打印,而word文档的页码数又是奇数的话,不同文件的首尾页内容可能会打印到同一张纸里。针对这个问题,需要检查每个word文档的页数,如果页数为奇数页,则再插入一页空白页。

下面用vba进行处理:(vba代码的操作步骤同上面转pdf的步骤,这里略)

Sub AddBlankPageToOddPageDocs()
    Dim folderPath As String
    Dim fileName As String
    Dim doc As Document
    Dim totalPages As Integer

    ' 设置文件夹路径
    folderPath = "D:\downloads\"   ' 将这里更改为你的word文档所在文件夹路径,路径最后必须包含 \ 符号!

    ' 获取文件夹中的第一个文件
    fileName = Dir(folderPath & "*.doc*")

    ' 遍历文件夹中的所有Word文件
    Do While fileName <> ""
        ' 打开文档
        Set doc = Documents.Open(folderPath & fileName)

        ' 计算文档的总页数
        totalPages = doc.ComputeStatistics(wdStatisticPages)

        ' 检查页数是否为奇数
        If totalPages Mod 2 <> 0 Then
            ' 将光标移到文档末尾
            Selection.EndKey Unit:=wdStory

            ' 插入分页符以添加空白页
            Selection.InsertBreak Type:=wdPageBreak
        End If

        ' 保存并关闭文档
        doc.Close SaveChanges:=wdSaveChanges

        ' 获取下一个文件
        fileName = Dir
    Loop

    MsgBox "所有文档已检查完毕。若页数为奇数,则已添加空白页。"
End Sub

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言