Excel 2019 for Mac下VBA自定义纸张打印异常问题求助
Excel 2019 for Mac VBA打印自定义纸张尺寸异常问题解决
环境与问题背景
- 运行环境:Excel 2019 for Mac
- 打印机:Polono PL60,自定义纸张尺寸100x150mm,已设为系统默认打印机,纸张尺寸同步设为默认
- 需求:通过VBA自动打印Sheet2,需采用100x150mm横向打印
- 核心问题:手动选择该纸张尺寸打印输出正常,但VBA运行时打印效果与手动预览不一致;无法在VBA中直接指定100x150mm尺寸,最接近的
xlJapanesePostcard仅纵向打印正常,横向则异常;宏运行时会自动切换到默认打印设置导致输出错误,但宏执行后查看打印预览设置无变化,手动仍可正常打印
现有VBA代码
Sub PrintSheet2WithCustomPageSetup() Dim ws As Worksheet On Error Resume Next ' 指定目标工作表为Sheet2 Set ws = ThisWorkbook.Sheets("Sheet2") If ws Is Nothing Then MsgBox "Sheet2 not found!", vbExclamation Exit Sub End If ' 激活工作簿与工作表 ThisWorkbook.Activate ws.Activate ' 应用自定义页面设置 With ws.PageSetup ' 纸张尺寸:使用打印机定义的100x150mm规格(未直接指定) .Orientation = xlLandscape .Zoom = False ' 启用"调整为合适大小" .FitToPagesWide = 1 ' 调整为1页宽 .FitToPagesTall = 1 ' 调整为1页高 ' 设置边距(单位:厘米转磅) .TopMargin = Application.CentimetersToPoints(0.1) .BottomMargin = Application.CentimetersToPoints(0.1) .LeftMargin = Application.CentimetersToPoints(0.1) .RightMargin = Application.CentimetersToPoints(0.3) .HeaderMargin = Application.CentimetersToPoints(0.1) .FooterMargin = Application.CentimetersToPoints(0.1) ' 内容对齐设置 .CenterHorizontally = True .CenterVertically = False End With ' 使用默认打印机打印 ws.PrintOut Copies:=1 On Error GoTo 0 End Sub
已尝试的无效操作
- 调整边距、内容对齐方式,无改善
- 尝试设置
.PaperSize = xlJapanesePostcard并改为纵向打印正常,但横向打印输出异常 - 切换打印预设、上次使用设置、默认设置,结果一致;手动使用上次设置打印正常,但宏运行时自动切换到默认设置
- 参考过同类问题方案,但Excel 2019 for Mac页面设置无Options按钮,方案不适用
解决方案建议
方法1:直接指定用户自定义纸张尺寸
在Mac Excel中,可通过xlPaperUser指定自定义纸张尺寸,同时手动设置纸张的宽度和高度(单位为磅,1厘米=28.3465磅)。由于是横向打印,需将纸张宽度设为150mm(15厘米),高度设为100mm(10厘米),修改后的PageSetup代码如下:
With ws.PageSetup .PaperSize = xlPaperUser .PaperWidth = Application.CentimetersToPoints(15) ' 对应150mm宽度 .PaperHeight = Application.CentimetersToPoints(10) ' 对应100mm高度 .Orientation = xlLandscape .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 ' 保留原边距与对齐设置... End With
方法2:结合AppleScript调用系统打印预设
若方法1无效,可提前在系统打印对话框中保存Polono PL60的100x150mm横向打印预设,再通过VBA调用AppleScript触发该预设打印:
Sub PrintWithAppleScript() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet2") If ws Is Nothing Then MsgBox "Sheet2 not found!", vbExclamation Exit Sub End If ws.Activate ' 激活工作表确保打印范围正确 ' 构建AppleScript脚本,替换"你的打印预设名称"为实际保存的预设名 Dim scriptText As String scriptText = "tell application ""Microsoft Excel""" & vbCrLf & _ " activate" & vbCrLf & _ " print active sheet with properties {print preset:""你的打印预设名称""}" & vbCrLf & _ "end tell" MacScript scriptText ' 执行AppleScript End Sub
方法3:添加延迟确保设置生效
Mac Excel的PageSetup设置可能存在生效延迟,可在设置完成后添加短暂延迟,确保参数应用后再执行打印:
' 在PageSetup设置完成后添加2秒延迟 Application.Wait Now + TimeValue("00:00:02") ws.PrintOut Copies:=1
内容的提问来源于stack exchange,提问作者dizaj
相关产品推荐
相关产品推荐

