SolidWorks 2017零件导出DXF宏报错及无输出问题求助
SolidWorks零件导出DXF宏问题解决
问题说明
- 使用SolidWorks 2017,需通过宏将零件导出为DXF格式
- STEP、XT、STL等格式导出正常,但DXF宏执行无报错却无文件输出
- 自行录制的宏执行到代码
Set myView = Part.CreateDrawViewFromModelView3(Part, "*Oben", 0, 0, 0)时,弹出Runtime error '438': 对象不支持该属性或方法错误
错误原因
录制的宏存在多处逻辑错误:
- 冗余的CosmosWorks相关代码,与DXF导出无关,干扰流程
- 直接调用零件文档的
SaveAs3保存为DXF无效,零件文档无法直接保存为2D DXF格式(需通过视图导出或工程图中转) 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
相关产品推荐
相关产品推荐

