You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助将现有VBA打印代码与单作业打印代码合并

合并打印任务解决网络打印机错误问题

我有一个工作簿,每次循环会插入不同数据并打印单个工作表。但受总部网络打印机队列驱动限制,再加上网络连接缓慢,打印时频繁出现错误。我找到一段能把多个单页打印任务合并成一个多页打印任务的VBA代码,应该能解决这个问题,但不知道怎么和自己的现有代码合并,也不确定是否有效。

我的现有代码:

Sub PrintFormsNBC()
    Dim StartRow As Integer
    Dim EndRow As Integer
    Dim msg As String
    Dim i As Integer
    
    StartRow = Range("NBC!StartRow")
    EndRow = Range("NBC!EndRow")
    
    If StartRow > EndRow Then
        msg = "ERROR" & vbCrLf & "The starting row must be less than the ending row!"
        MsgBox msg, vbCritical, APPNAME
    End If
    
    For i = StartRow To EndRow
        Range("NBC!RowIndex") = i
        If Range("NBC!Preview") Then
            ActiveSheet.PrintPreview
        Else
            ActiveSheet.PrintOut
        End If
    Next i
    Worksheets("NBC").Activate
End Sub

整合方案及修改后代码

核心思路是利用Application.PrintCommunication暂停打印通信,将所有打印请求缓存后一次性发送,从而合并成单个打印任务。修改后的代码如下:

Sub PrintFormsNBC()
    Dim StartRow As Integer
    Dim EndRow As Integer
    Dim msg As String
    Dim i As Integer
    
    StartRow = Range("NBC!StartRow")
    EndRow = Range("NBC!EndRow")
    
    ' 校验行号逻辑,添加退出避免后续错误执行
    If StartRow > EndRow Then
        msg = "ERROR" & vbCrLf & "起始行必须小于结束行!"
        MsgBox msg, vbCritical, APPNAME
        Exit Sub
    End If
    
    ' 关闭打印通信,临时缓存打印请求
    Application.PrintCommunication = False
    
    ' 循环更新数据并添加到打印队列
    For i = StartRow To EndRow
        Range("NBC!RowIndex") = i
        ActiveSheet.PrintOut Copies:=1, Preview:=False, ActivePrinter:=ActivePrinter
    Next i
    
    ' 恢复打印通信,一次性发送所有缓存的打印任务
    Application.PrintCommunication = True
    
    ' 预览功能无法合并,需单独循环处理
    If Range("NBC!Preview") Then
        For i = StartRow To EndRow
            Range("NBC!RowIndex") = i
            ActiveSheet.PrintPreview
        Next i
    End If
    
    Worksheets("NBC").Activate
End Sub

关键说明

  • 合并打印的核心是Application.PrintCommunication = False:这会阻止Excel每次循环都向打印机发送单独任务,而是将所有打印请求暂存,直到开启通信后一次性发送,最终生成一个包含所有页面的打印任务。
  • 预览功能无法合并:因为预览是实时渲染单个页面,所以如果勾选了预览选项,仍需逐个循环预览;只有实际打印时才会合并任务。
  • 测试建议:先选择少量行测试,确认打印机队列中仅生成单个打印任务后,再进行批量打印。

内容的提问来源于stack exchange,提问作者Skeeter56

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:35:19