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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:42:35