SolidWorks VBA打印A4图纸无报错但失效,其他尺寸正常求解决
SolidWorks VBA打印工程图A4纵向失效问题排查与修复
问题分析
你的A4纵向打印代码无报错但无法工作,其他尺寸正常,核心大概率是PrintOut4参数传递错误,或纸张尺寸设置的兼容性问题。
修复步骤
1. 修正PrintOut4的打印范围参数
原代码中第二个参数NameFile是文件标题,但PrintOut4的第二个参数要求是打印范围(如所有图纸、单张图纸名称),而非文件名。传错参数会导致SolidWorks无法识别打印范围,进而不执行打印。
修改后的代码:
Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swModelDocExt As SldWorks.ModelDocExtension Dim swPageSetup As SldWorks.PageSetup Dim Printer As String Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swModelDocExt = swModel.Extension Set swPageSetup = swModel.PageSetup Printer = "Brother HL-5470DW series Printer" With swPageSetup .PrinterPaperSize = 9 ' swPrinterPaperSizeA4 .Orientation = 1 ' swPortrait .HighQuality = True .Scale2 = False .DrawingColor = 1 End With ' 将第二个参数改为打印范围,"All Sheets"表示打印所有图纸 swModelDocExt.PrintOut4 Printer, "All Sheets", swPageSetup
2. 优化纸张尺寸设置(可选,提升兼容性)
部分打印机可能对枚举值的支持存在差异,可改用按名称设置纸张尺寸,替代硬编码枚举值:
' 替换原代码中的.PrinterPaperSize = 9 swPageSetup.SetPrinterPaperSizeByName "A4"
3. 验证打印机名称准确性
确保代码中打印机名称与系统中完全一致,可通过以下代码获取所有可用打印机名称,对比确认:
Dim printerNames As Variant printerNames = swApp.GetPrinterNames Dim i As Integer For i = 0 To UBound(printerNames) Debug.Print printerNames(i) Next i
运行后在VBA编辑器的“立即窗口”查看打印机名称,复制准确名称到代码中。
4. 确认PageSetup修改生效(可选)
若修改后仍无效,可尝试在打印前刷新页面设置:
swModel.SavePageSetup
UserForm集成注意事项
将修复后的代码绑定到A4纵向按钮的Click事件中,确保UserForm通过快捷键触发时,当前激活的工程图对象正确获取(已在代码中通过swApp.ActiveDoc实现)。
内容的提问来源于stack exchange,提问作者J.bruno
相关产品推荐
相关产品推荐

