SolidWorks VBA宏代码类型不匹配错误修正求助
修正SolidWorks VBA宏的类型不匹配错误
错误原因分析
NewDocument用法错误:NewDocument是用于基于模板新建零件的接口,而非打开现有零件。打开已有的BoundingBox.SLDPRT应该使用OpenDoc6。InsertPart参数与返回值错误:InsertPart的第一个参数应为要插入的零件的文件路径或已打开的ModelDoc2对象,你错误传入了当前编辑的零件对象objModel。InsertPart的返回值是Feature对象,而非ModelDoc2,不能赋值给objModel。
ActiveDoc保存不可靠:循环中打开多个文档时,ActiveDoc可能指向错误的文档,应直接使用目标文档对象objModel。
修正后的代码
Sub OpenSldprtFiles() Dim strPath As String Dim strFile As String Dim objSW As SldWorks.SldWorks Dim objModel As SldWorks.ModelDoc2 Dim objBoundingBox As SldWorks.ModelDoc2 Dim insertFeature As SldWorks.Feature ' 存储InsertPart的返回值 Set objSW = Application.SldWorks ' 指定目标文件夹路径 strPath = "C:\Users\emilien.petit\Desktop\VolumeCalculation\Components\" ' 要插入的BoundingBox零件路径 Dim strBoundingBoxPath As String strBoundingBoxPath = "C:\Users\emilien.petit\Desktop\VolumeCalculation\BoundingBox.SLDPRT" ' 遍历文件夹中的所有.sldprt文件 strFile = Dir(strPath & "*.sldprt") Do While strFile <> "" ' 打开当前零件 Set objModel = objSW.OpenDoc6(strPath & strFile, swDocPART, swOpenDocOptions_Silent, "", 0, 0) ' 打开BoundingBox零件(以只读方式避免修改源文件) Set objBoundingBox = objSW.OpenDoc6(strBoundingBoxPath, swDocPART, swOpenDocOptions_Silent + swOpenDocOptions_ReadOnly, "", 0, 0) ' 激活当前编辑的零件,确保插入操作在正确的文档中执行 objSW.ActivateDoc strFile ' 插入BoundingBox零件,返回插入的特征 Set insertFeature = objModel.InsertPart(strBoundingBoxPath, 0) ' 关闭BoundingBox零件(无需保存) objSW.CloseDoc strBoundingBoxPath ' 保存修改后的零件 Dim strNewName As String strNewName = Replace(strFile, ".sldprt", "_new.sldprt") objModel.SaveAs3 "C:\Users\emilien.petit\Desktop\VolumeCalculation\" & strNewName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, Nothing, Nothing ' 关闭原零件 objSW.CloseDoc strPath & strFile ' 获取下一个文件名 strFile = Dir() Loop End Sub
关键修改说明
- 替换
NewDocument为OpenDoc6:用OpenDoc6打开现有的BoundingBox.SLDPRT,并添加swOpenDocOptions_ReadOnly参数防止误改源文件。 - 修正
InsertPart调用:传入BoundingBox的文件路径作为第一个参数,将返回值赋值给Feature类型变量,而非ModelDoc2。 - 激活目标文档:插入零件前调用
ActivateDoc确保操作在当前打开的零件中执行。 - 直接使用
objModel保存:避免ActiveDoc指向错误文档的问题。
内容的提问来源于stack exchange,提问作者emln_ptt
相关产品推荐
相关产品推荐

