Word VBA实现横向纸张拼版打印4个横向文档页的问题求解
解决代码
你遇到的问题核心是仅修改了文档内页方向,没有同步指定打印输出的物理纸张方向,打印缩放逻辑会默认读取打印机默认设置排列内容,以下是可直接运行的完整代码:
Sub 2行2列横向拼版打印() Dim ps As PageSetup Set ps = ActiveDocument.PageSetup ' 保存原始页面配置,执行后恢复不影响原有文档设置 Dim originalOrient As WdOrientation, originalWidth As Single, originalHeight As Single originalOrient = ps.Orientation originalWidth = ps.PageWidth originalHeight = ps.PageHeight ' 强制设置打印纸张为横向,以下为A4纸参数,其他尺寸自行替换 ps.Orientation = wdOrientationLandscape ps.PageWidth = 29.7 * 28.35 ' 长边297mm转磅值,1cm=28.35磅 ps.PageHeight = 21 * 28.35 ' 短边210mm转磅值 ' 执行拼版打印,缩放参数匹配已设置的纸张尺寸避免裁切 ActiveDocument.PrintOut _ PrintZoomRow:=2, _ PrintZoomColumn:=2, _ PrintZoomPaperWidth:=ps.PageWidth, _ PrintZoomPaperHeight:=ps.PageHeight ' 恢复文档原始页面设置 ps.Orientation = originalOrient ps.PageWidth = originalWidth ps.PageHeight = originalHeight End Sub
可选兼容方案
如果上述代码仍被打印机驱动覆盖方向设置,可以在打印调用前添加一行代码强制触发打印配置页确认横向设置:
' 仅适配Office for Windows版本,打印前会自动选中横向选项 SendKeys "%fup{TAB}{RIGHT}~%c", True
问题根因
PrintOut方法本身不携带纸张方向参数,会优先读取当前打印机的默认方向配置,仅修改文档的页面方向无法覆盖打印驱动的默认设置- 之前手动设置
PrintZoomPaperWidth/Height时没有匹配物理纸张的宽高比例,所以会出现内容裁切
内容的提问来源于stack exchange,提问作者Rsge
相关产品推荐
相关产品推荐

