跳到主要内容

修复使用未来版本API的SOLIDWORKS宏

症状

最近开发的SOLIDWORKS宏在旧版本(非最新版本)的SOLIDWORKS上运行。运行时,会显示运行时错误'438':对象不支持此属性或方法

运行宏时显示运行时错误'438':对象不支持此属性或方法{ width=400 height=151 }

或者可能显示运行时错误'445':对象不支持此操作

运行宏时显示运行时错误'445':对象不支持此操作{ width=400 height=171 }

原因

SOLIDWORKS是向后兼容的系统,这意味着旧版本的文件或API将与每个新版本兼容。但是SOLIDWORKS不是向前兼容,这意味着新的API不能在旧版本的软件中使用。每个SOLIDWORKS版本都会向库中添加新的API,开发人员可以使用这些API来编写宏。但是这些宏不能在旧版本的SOLIDWORKS中使用。

解决方法

  • 检查SOLIDWORKS API帮助文档中突出显示的方法的可访问性选项

SOLIDWORKS API帮助文档中的可用性选项{ width=400 height=216 }

  • 如果最早可用版本较新,则需要使用替代方法替换该方法

通常,SOLIDWORKS会使用索引命名方法,例如OpenDoc4、OpenDoc5、OpenDoc6,表示已被取代的版本。如果是这种情况,请尝试查看是否有较旧版本的此方法可用。如果有,则可以使用。请注意,较旧版本可能具有不同的参数集,因此仅更改版本号可能不足够。

CompConfigProperties API方法的不同版本之间的差异{ 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