修复使用未来版本API的SOLIDWORKS宏
症状
最近开发的SOLIDWORKS宏在旧版本(非最新版本)的SOLIDWORKS上运行。运行时,会显示运行时错误'438':对象不支持此属性或方法。
{ width=400 height=151 }
或者可能显示运行时错误'445':对象不支持此操作。
{ width=400 height=171 }
原因
SOLIDWORKS是向后兼容的系统,这意味着旧版本的文件或API将与每个新版本兼容。但是SOLIDWORKS不是向前兼容,这意味着新的API不能在旧版本的软件中使用。每个SOLIDWORKS版本都会向库中添加新的API,开发人员可以使用这些API来编写宏。但是这些宏不能在旧版本的SOLIDWORKS中使用。
解决方法
- 检查SOLIDWORKS API帮助文档中突出显示的方法的可访问性选项
{ width=400 height=216 }
- 如果最早可用版本较新,则需要使用替代方法替换该方法
通常,SOLIDWORKS会使用索引命名方法,例如OpenDoc4、OpenDoc5、OpenDoc6,表示已被取代的版本。如果是这种情况,请尝试查看是否有较旧版本的此方法可用。如果有,则可以使用。请注意,较旧版本可能具有不同的参数集,因此仅更改版本号可能不足够。
{ width=400 height=122 }
- 如果没有较旧的方法可用,则需要使用替代方法重写宏的逻辑。
- 将SOLIDWORKS软件升级到最低支持的版本
示例宏使用添加到SOLIDWORKS 2017的API
Dim swApp As SldWorks.SldWorks
Dim swAssy As SldWorks.AssemblyDoc
Sub main()
Set swApp = Application.SldWorks
Set swAssy = swApp.ActiveDoc
swAssy.CompConfigProperties5 swComponentSuppressionState_e.swComponentSuppressed, _
swComponentSolvingOption_e.swComponentRigidSolving, _
True, False, "", False, False
End Sub
修改后的宏,使其与SOLIDWORKS 2005及更高版本兼容
Dim swApp As SldWorks.SldWorks
Dim swAssy As SldWorks.AssemblyDoc
Sub main()
Set swApp = Application.SldWorks
Set swAssy = swApp.ActiveDoc
swAssy.CompConfigProperties4 swComponentSuppressionState_e.swComponentSuppressed, _
swComponentSolvingOption_e.swComponentRigidSolving, _
True, False, "", False
End Sub