跳到主要内容

运行包含多个入口点的SOLIDWORKS宏失败

症状

如果从SOLIDWORKS的工具->宏->运行菜单中运行,SOLIDWORKS宏无法正常工作。

这可能会产生类似于运行时错误'91':对象变量或With块变量未设置的错误。

'运行时错误'91':在运行宏时出现对象变量或With块变量未设置{ width=320 height=194 }

或者宏可能会表现异常,或者根本不执行任何步骤。 如果在VBA编辑器中打开并通过F5或点击绿色箭头(运行)按钮执行,宏将正常运行。

原因

当宏启动时,SOLIDWORKS会尝试找到入口点(要首先执行的子程序(sub))。这将是不包含任何参数的sub。

如果宏包含多个这样的sub,将会产生歧义,任何sub都可以成为入口点。

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2

Sub main() '此方法必须是入口点

ConnectToSw
CountFeatures

End Sub

Sub ConnectToSw() '此方法可以被选为入口点

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If swModel Is Nothing Then
MsgBox "请打开模型"
End
End If

End Sub

Sub CountFeatures() '此方法可以被选为入口点

swApp.SendMsgToUser "活动模型中有 " & swModel.GetFeatureCount() & " 个特征"

End Sub

入口sub是关键的,因为它通常包含初始化例程,如果不按正确顺序执行,宏逻辑将受到影响。

解决方法

  • 始终保留一个无参数的子程序(通常称为main)。对于不需要输入参数的其他sub,使用dummy参数,以防止不正确的行为。可以传递任何值给此参数,因为它不会被使用(例如""或Empty)。
Call AnotherProc(Empty) '使用空值调用sub
----
Sub AnotherProc(dummy) '未使用的dummy参数
End Sub
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2

Sub main() '此方法是唯一一个没有参数的方法

ConnectToSw Empty
CountFeatures Empty

End Sub

Sub ConnectToSw(dummy)

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If swModel Is Nothing Then
MsgBox "请打开模型"
End
End If

End Sub

Sub CountFeatures(dummy) '此方法可以被选为入口点

swApp.SendMsgToUser "活动模型中有 " & swModel.GetFeatureCount() & " 个特征"

End Sub
  • 将宏分配给按钮。在这种情况下,将需要强制选择入口点sub,以防止宏中存在多个无参数sub时的歧义。