I'm piggy-backing off of a previous discussion here: https://forum.solidworks.com/thread/80102
It looked like a good template for a situation that I'm dealing with:
- Have equations in a model
- Delete some features that reference equations (a sketch dimension linked to another value by an equation, for example)
- SW doesn't delete the "dangling" equations, leaves them as invalid
- I want to use a macro to cycle through all equations in a file, delete any that are invalid.
Based on what I saw there, I thought that this macro would work:
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swEqnMgr As SldWorks.EquationMgr
Dim i As Long
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swEqnMgr = swModel.GetEquationMgr
For i = i To swEqnMgr.GetCount - 1
Debug.Print swEqnMgr.Equation(i)
Debug.Print swEqnMgr.Value(i)
If swEqnMgr.Status = -1 Then
Debug.Print swEqnMgr.Delete(i)
End If
Next i
End Sub
And it did. Sort of. I tested it on a file that had these equations:
When I run the above macro, only the first equation gets deleted. If I run the macro again, the second equation gets deleted.
So it works. But my "For i..." loop isn't functioning as I thought it would. I'm guessing that it's because the id numbers of the equations adjust after I delete one of them (i=1 becomes i=0, etc.).
Any thoughts on how best to combat this?
SolidworksApi macros