首页 > 解决方案 > Excel VBA 中的批量打印作为一项作业

问题描述

我正在使用 Excel 创建和打印运输标签。用户填写标签(客户名称、数量等)。然后,他们选择需要标签的单位数量以及每个单位必须打印的标签数量。示例输入可能是总共 8 个单元,每个单元有 2 个标签。然后它会打印单元编号为 1、1、2、2、3、3、... 8、8 的标签。我还包括一个功能,允许他们更改单元起始编号,以便他们可以在中途开始一组单位。使用与之前相同的示例,但从单元 3 开始,这将打印单元编号 3、3、4、4、5、5、... 8、8。最后,有时最终单元的数量与其余单元不同的单位。为此,用户可以选中“打印部分单位”并输入单独的单位数量,该数量将仅替换最终单位的现有单位数量。

这是当前代码:

Sub BatchPrint_Click()

'Set the size of the page numbering variable
Dim PageNumbering() As Integer
ReDim PageNumbering(Range("TotalNo").Value - Range("StartNo").Value)


'Fill the page numbering variable with the appropriate page numbers
Dim i As Integer
For i = 0 To Range("TotalNo").Value - Range("StartNo").Value
    PageNumbering(i) = Range("StartNo").Value + i
Next i

'Save the quantity for reset
Dim Qty As Variant
Qty = Range("Quantity")

'Batch Print Sheets
Dim ii As Integer
For ii = 0 To Range("TotalNo").Value - Range("StartNo").Value
    Range("CurrentPage") = PageNumbering(ii)
    Range("CurrentUnitOf") = PageNumbering(ii)
    If PageNumbering(ii) = Range("TotalNo").Value And Partial.Value = True Then
        Range("Quantity").MergeArea = Range("PartialQuantity")
    End If
        ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, _
        Copies:=Range("SetNo").Value, Collate:=True, IgnorePrintAreas:=False
Next ii

'Reset the quantity
Range("Quantity") = Qty

End Sub

这让我想到了我的问题:这会将每个单独单元的标签作为单独的打印作业发送。这通常不是问题,但有时用户可能正在打印 200 多个标签,如果他们在打印时发现标签有错误,则没有真正的方法可以停止所有打印,因为它已发送到打印机作为200多个小工作。有没有办法改变代码,使其全部作为一个打印作业发送?

谢谢!

标签: excelvbaprinting

解决方案


无法更改 Excel 的单独打印作业行为,但您可以保存到中间文件并将文件作为单个打印作业打印。

Win2PDF 支持“自动合并”功能,可自动将单独的 Excel 打印作业合并到单个 PDF 文件中。它还支持“自动命名”功能,可配置为自动命名 PDF 文件并将其打印到纸质或标签打印机。最终结果是将单个打印作业发送到打印机,但中间 PDF 文件将保留在自动命名配置中配置的文件夹中。您的脚本可能能够删除此文件。

披露:我为 Win2PDF 的出版商工作。


推荐阅读