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

SolidWorks 2017零件导出DXF宏报错及无输出问题求助

SolidWorks零件导出DXF宏问题解决

问题说明

  • 使用SolidWorks 2017,需通过宏将零件导出为DXF格式
  • STEP、XT、STL等格式导出正常,但DXF宏执行无报错却无文件输出
  • 自行录制的宏执行到代码Set myView = Part.CreateDrawViewFromModelView3(Part, "*Oben", 0, 0, 0)时,弹出Runtime error '438': 对象不支持该属性或方法错误

错误原因

录制的宏存在多处逻辑错误:

  1. 冗余的CosmosWorks相关代码,与DXF导出无关,干扰流程
  2. 直接调用零件文档的SaveAs3保存为DXF无效,零件文档无法直接保存为2D DXF格式(需通过视图导出或工程图中转)
  3. CreateDrawViewFromModelView3是**工程图文档(DrawingDoc)**的专属方法,但代码中调用该方法时,当前Part变量指向的是零件文档,导致对象方法不匹配报错

修正方案

提供两种可行的DXF导出宏代码,按需选择:

方案1:直接导出零件指定视图为DXF

无需创建工程图,快速导出零件的标准视图:

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim longStatus As Long
Dim filePath As String
Dim newFilePath As String

Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    ' 检查零件是否已保存
    filePath = swModel.GetPathName
    If filePath = "" Then
        MsgBox "请先保存零件文件", vbExclamation
        Exit Sub
    End If
    
    ' 生成DXF保存路径(替换原后缀)
    newFilePath = Left(filePath, Len(filePath) - 6) & ".dxf"
    
    ' 切换到需要导出的视图(德语模板为"*Oben",中文模板改为"上视")
    swModel.ShowNamedView2 "*Oben", swStandardViews_e.swFrontView
    
    ' 导出当前视图为DXF
    longStatus = swModel.SaveAs4(newFilePath, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing)
    
    ' 提示导出结果
    If longStatus = swFileSaveError_e.swFileSaveError_NoErrors Then
        MsgBox "DXF导出成功:" & newFilePath, vbInformation
    Else
        MsgBox "DXF导出失败,错误代码:" & longStatus, vbCritical
    End If
End Sub

方案2:通过工程图导出视图为DXF

适用于需要遵循工程图模板规范导出的场景:

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.DrawingView
Dim filePath As String
Const DrawTemplatePath As String = "C:\ProgramData\SolidWorks\SOLIDWORKS 2017\templates\Zeichnung.drwdot"
Dim newFilePath As String
Dim longStatus As Long

Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    ' 检查零件是否已保存
    filePath = swModel.GetPathName
    If filePath = "" Then
        MsgBox "请先保存零件文件", vbExclamation
        Exit Sub
    End If
    
    ' 生成DXF保存路径
    newFilePath = Left(filePath, Len(filePath) - 6) & ".dxf"
    
    ' 创建工程图文档
    Set swDraw = swApp.NewDocument(DrawTemplatePath, 0, 0, 0)
    If swDraw Is Nothing Then
        MsgBox "无法加载工程图模板", vbCritical
        Exit Sub
    End If
    
    ' 激活工程图
    swApp.ActivateDoc2 swDraw.GetPathName, False, longStatus
    
    ' 在工程图中创建模型视图(第一个参数为零件文档对象,视图名称按需调整)
    Set swView = swDraw.CreateDrawViewFromModelView3(swModel, "*Oben", 0.1, 0.1, 0)
    If swView Is Nothing Then
        MsgBox "创建视图失败", vbCritical
        swDraw.CloseDoc
        Exit Sub
    End If
    
    ' 选中视图并导出为DXF
    swDraw.ClearSelection2 True
    swView.Select True
    longStatus = swDraw.SaveAs4(newFilePath, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing)
    
    ' 关闭工程图(不保存工程图本身)
    swDraw.CloseDoc False
    
    ' 提示导出结果
    If longStatus = swFileSaveError_e.swFileSaveError_NoErrors Then
        MsgBox "DXF导出成功:" & newFilePath, vbInformation
    Else
        MsgBox "DXF导出失败,错误代码:" & longStatus, vbCritical
    End If
End Sub

注意事项

  • 视图名称需匹配SolidWorks语言版本:德语模板用*Oben,中文模板改为上视,英文模板用*Top
  • 工程图模板路径需与你的SolidWorks安装路径一致,若路径错误会导致工程图创建失败
  • 若需要导出多个视图,可在方案2中重复调用CreateDrawViewFromModelView3添加视图后再导出

内容的提问来源于stack exchange,提问作者Nerdhector

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:30:48