修复使用未来版本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