Equation Manager with Global Variable
Equation Manager with Global Variable

This example demonstrates how to modify the value of the nominated global variable in the equation manager.

Change the name of the variable and the value constants in the head of the macro.

Const VAR_NAME As String = "Factor"
Const NEW_VALUE As Double = 0.75

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

Sub main()

    Set swApp = Application.SldWorks

    Set swModel = swApp.ActiveDoc
    If Not swModel Is Nothing Then
        Dim swEqMgr As SldWorks.EquationMgr
        Set swEqMgr = swModel.GetEquationMgr
        If SetEquationValue(swEqMgr, VAR_NAME, NEW_VALUE) Then
            swModel.ForceRebuild3 True
            MsgBox "Failed to find the equation " & name
        End If
        MsgBox "Please open the model"
    End If
End Sub

Function SetEquationValue(eqMgr As SldWorks.EquationMgr, name As String, value As Double) As Boolean
    Dim index As Integer
    index = GetEquationIndexByName(eqMgr, name)
    If index <> -1 Then
        eqMgr.Equation(index) = """" & name & """=" & NEW_VALUE
        SetEquationValue = True
        SetEquationValue = False
    End If
End Function

Function GetEquationIndexByName(eqMgr As SldWorks.EquationMgr, name As String) As Integer
    Dim i As Integer
    GetEquationIndexByName = -1
    For i = 0 To eqMgr.GetCount - 1
        Dim eqName As String
        eqName = Trim(Split(eqMgr.Equation(i), "=")(0))
        eqName = Mid(eqName, 2, Len(eqName) - 2) 'removing the "" symbols from the name
        If UCase(eqName) = UCase(VAR_NAME) Then
            GetEquationIndexByName = i
            Exit Function
        End If
End Function