VBA实现特定工作表始终打印在A4纸背面的需求与代码求助
实现Excel工作表A动态多页时,每张A4背面打印工作表B
核心思路
要让动态扩展的工作表A每一页的背面都打印工作表B,本质是要让A的每一页与B的内容一一对应成一组双面页。由于Excel原生没有“每页后附加指定工作表打印”的功能,我们可以通过VBA实现两种可靠方案:
方案一:创建临时合并工作表(兼容性最强)
先将A的每一页内容单独拆分,然后在每一页后插入B的完整内容,最后将合并后的临时表设置为双面打印。这种方法不依赖打印机的自动双面功能,适合所有打印机。
代码实现
Sub PrintWithBackside() Dim wsA As Worksheet, wsB As Worksheet, wsTemp As Worksheet Dim totalPagesA As Integer, i As Integer Dim pageRange As Range Dim lastRowTemp As Long ' 定义目标工作表 Set wsA = ThisWorkbook.Worksheets("A") Set wsB = ThisWorkbook.Worksheets("B") ' 处理A的空行删除 wsA.Activate wsA.Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Delete ' 获取A的总打印页数 totalPagesA = wsA.PageSetup.Pages.Count ' 创建临时工作表 Set wsTemp = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)) wsTemp.Name = "TempPrint" ' 循环处理A的每一页 For i = 1 To totalPagesA ' 获取A当前页的打印区域 wsA.Activate wsA.PageSetup.PrintArea = "" ExecuteExcel4Macro "PAGE.SETUP(""$A:$IV"")" Set pageRange = wsA.Range(wsA.PageSetup.PrintArea).Offset((i - 1) * wsA.PageSetup.FitToPagesTall, 0).Resize(wsA.PageSetup.FitToPagesTall, wsA.PageSetup.FitToPagesWide * 256) ' 复制A当前页到临时表 lastRowTemp = wsTemp.Cells(wsTemp.Rows.Count, 1).End(xlUp).Row + 1 pageRange.Copy wsTemp.Cells(lastRowTemp, 1) ' 插入分页符 wsTemp.Rows(lastRowTemp).PageBreak = xlPageBreakManual ' 复制B的内容到临时表下一行 lastRowTemp = wsTemp.Cells(wsTemp.Rows.Count, 1).End(xlUp).Row + 1 wsB.UsedRange.Copy wsTemp.Cells(lastRowTemp, 1) ' 插入分页符准备下一组 wsTemp.Rows(lastRowTemp).PageBreak = xlPageBreakManual Next i ' 设置临时表打印格式 With wsTemp.PageSetup .PaperSize = xlPaperA4 .Orientation = wsA.PageSetup.Orientation .LeftMargin = wsA.PageSetup.LeftMargin .RightMargin = wsA.PageSetup.RightMargin .TopMargin = wsA.PageSetup.TopMargin .BottomMargin = wsA.PageSetup.BottomMargin .Zoom = False .FitToPagesWide = 1 .Duplex = xlDuplexFlipShortEdge ' 短边翻转适配纵向双面 End With ' 打印临时表 wsTemp.PrintOut ' 删除临时表 Application.DisplayAlerts = False wsTemp.Delete Application.DisplayAlerts = True End Sub
注意事项
- 代码中
FitToPagesTall和FitToPagesWide需与工作表A的原设置一致,确保分页准确。 - 若A的打印区域不是全表,需修改
pageRange的获取逻辑匹配实际范围。
方案二:利用打印机自动双面功能(更高效)
如果你的打印机支持自动双面打印,可以直接控制打印顺序:先打印A的所有奇数页(正面),再打印对应次数的B(背面),依赖打印机自动完成双面装订。
代码实现
Sub PrintAutoDuplex() Dim wsA As Worksheet, wsB As Worksheet Dim totalPagesA As Integer, i As Integer Set wsA = ThisWorkbook.Worksheets("A") Set wsB = ThisWorkbook.Worksheets("B") ' 处理A的空行删除 wsA.Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Delete totalPagesA = wsA.PageSetup.Pages.Count ' 设置打印格式与双面参数 With wsA.PageSetup .PaperSize = xlPaperA4 .Duplex = xlDuplexFlipShortEdge End With ' 打印A的所有页(正面) wsA.PrintOut From:=1, To:=totalPagesA ' 循环打印B,次数匹配A的页数(背面) ' 若背面顺序颠倒,可改为For i = totalPagesA To 1 Step -1 For i = 1 To totalPagesA wsB.PrintOut Next i End Sub
注意事项
- 不同品牌打印机的自动双面逻辑有差异,若背面内容顺序错误,可调整B的打印循环为倒序。
- 需确保打印机硬件已开启自动双面打印功能。
通用设置提醒
- 确保工作表B的打印格式为A4,边距与A完全一致,避免背面内容错位。
- 若A是基于内容自动分页,需将
PageSetup中的FitToPagesTall设为False,让Excel自动根据内容拆分页面。
内容的提问来源于stack exchange,提问作者N3VTr0N
相关产品推荐
相关产品推荐

