如何通过Word VBA宏控制打印任务的单页打印页数?
解决Word VBA打印不修改文档实现“每页多页”打印的问题
需求说明
每日自动执行3页Word文档的打印任务,流程如下:
- 重复4次「半尺寸打印(每页纸打印2页文档)第2、3页10份 + 全尺寸打印(每页纸打印1页文档)指定单页1份」的流程
- 最终生成40份半尺寸午晚餐菜单(第2、3页)和3份全尺寸展示菜单(第1、2、3页各1份),方便裁纸机处理
现有问题
原代码通过修改PageSetup.TwoPagesOnOne属性实现每页多页打印,但该属性会直接修改文档本身的设置,且效果与打印对话框中设置“每页打印页数”的结果不符,无法正确调整菜单尺寸。
现有代码
Sub DailyMenuPrintJob() Dim doc As Document Set doc = ActiveDocument ' Print 10 copies of pages 2–3, 2 pages per sheet (half-sized) doc.PageSetup.TwoPagesOnOne = True doc.PrintOut Range:=wdPrintFromTo, From:="2", To:="3", _ Copies:=1 ' === Print Breakfast Display (Page 1) === doc.PageSetup.TwoPagesOnOne = False doc.PrintOut Pages:="1", Copies:=1 ' Print 10 copies of pages 2–3, 2 pages per sheet (half-sized) ActiveDocument.PageSetup.TwoPagesOnOne = True doc.PrintOut Range:=wdPrintFromTo, From:="2", To:="3", _ Copies:=1 ' === Print Lunch Display (Page 2) === doc.PageSetup.TwoPagesOnOne = False doc.PrintOut Pages:="2", Copies:=1 ' Print 10 copies of pages 2–3, 2 pages per sheet (half-sized) doc.PageSetup.TwoPagesOnOne = True doc.PrintOut Range:=wdPrintFromTo, From:="2", To:="3", _ Copies:=1 ' === Print Dinner Display (Page 3) === doc.PageSetup.TwoPagesOnOne = False doc.PrintOut Pages:="3", Copies:=1 ' Print 10 copies of pages 2–3, 2 pages per sheet (half-sized) doc.PageSetup.TwoPagesOnOne = True doc.PrintOut Range:=wdPrintFromTo, From:="2", To:="3", _ Copies:=1 End Sub
解决方案
使用Word VBA中PrintOut方法的PrintZoomColumns和PrintZoomRows参数,这两个参数完全对应打印对话框里的“每页打印的页数”设置,不会修改文档本身,仅作用于当前打印任务:
PrintZoomColumns:=2, PrintZoomRows:=1:每页纸横向打印2页文档(半尺寸)PrintZoomColumns:=1, PrintZoomRows:=1:每页纸打印1页文档(全尺寸)
修改后的代码
Sub DailyMenuPrintJob() Dim doc As Document Set doc = ActiveDocument ' 第1轮:半尺寸打印第2-3页10份 + 全尺寸打印第1页1份 doc.PrintOut Range:=wdPrintFromTo, From:="2", To:="3", _ Copies:=10, _ PrintZoomColumns:=2, PrintZoomRows:=1 ' 每页打印2页 doc.PrintOut Pages:="1", Copies:=1, _ PrintZoomColumns:=1, PrintZoomRows:=1 ' 每页打印1页 ' 第2轮:半尺寸打印第2-3页10份 + 全尺寸打印第2页1份 doc.PrintOut Range:=wdPrintFromTo, From:="2", To:="3", _ Copies:=10, _ PrintZoomColumns:=2, PrintZoomRows:=1 doc.PrintOut Pages:="2", Copies:=1, _ PrintZoomColumns:=1, PrintZoomRows:=1 ' 第3轮:半尺寸打印第2-3页10份 + 全尺寸打印第3页1份 doc.PrintOut Range:=wdPrintFromTo, From:="2", To:="3", _ Copies:=10, _ PrintZoomColumns:=2, PrintZoomRows:=1 doc.PrintOut Pages:="3", Copies:=1, _ PrintZoomColumns:=1, PrintZoomRows:=1 ' 第4轮:半尺寸打印第2-3页10份(完成40份累计) doc.PrintOut Range:=wdPrintFromTo, From:="2", To:="3", _ Copies:=10, _ PrintZoomColumns:=2, PrintZoomRows:=1 End Sub
代码说明
- 移除了所有修改
PageSetup属性的操作,避免改动文档本身 - 直接在
PrintOut方法中指定打印缩放参数,完全匹配打印对话框的设置逻辑 - 调整了
Copies参数为10,确保4轮半尺寸打印后累计生成40份午晚餐菜单 - 每轮打印的参数独立设置,互不干扰,保证打印效果符合预期
内容的提问来源于stack exchange,提问作者lukeisscripting
相关产品推荐
相关产品推荐

