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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:37:34