De waarde van een globale variabele wijzigen via een macro op Solidworks

Hallo

Ik gebruik een invoervak dialoogvenster om de hoogte van een element op te vragen (waarde opgeslagen onder Hoogte)

Ik zou graag willen dat mijn globale variabele, die ook wel Hoogte wordt genoemd, deze waarde via een macro aanneemt. Welke regel code maakt dit mogelijk?

Bedankt voor je feedback

Hallo 

Deze Code zou u moeten helpen. 

Hallo

Het spijt me, maar ik ga in cirkels rond. Ik kan het niet. Ik heb de code doorgenomen, maar ik begrijp er niet veel van... Ik geef toe dat een helpende hand op prijs zou worden gesteld.

Dim Hauteur_Value als geheel getal

Dim dubbele hoogte

Hauteur_Value = InputBox ("Geef de hoogte op .... ")

Dus ik heb een globale variabele genaamd "Hoogte". En ik wil gewoon dat deze variabele de nieuwe waarde (Hauteur_Value) aanneemt.

Dank u voor uw verlichting

Hallo 

Bijgevoegd is een benadering, (om decimalen te introduceren moet u de vergo gebruiken, niet de punt), 

Aan de andere kant lijkt de geselecteerde functie alleen met gehele getallen te werken!? . 

 


img_20210915_164115.jpg
1 like

Hallo

EDIT: verwijdering van de code omdat het het antwoord van @Lynk dupliceert

Vriendelijke groeten

Hallo

Na een paar hobbels in mijn vorige antwoord, is hier een functionele code gebaseerd op die van Lynk, maar waarmee je een decimale waarde kunt instellen, een waarde die in de InputBox kan worden ingevoerd met een punt of met een komma:

Dim Variable As String
Dim Hauteur_Value As String
Dim ValeurText As String

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

Sub main()
    Set swApp = Application.SldWorks

    Set swModel = swApp.ActiveDoc
    
    Variable = "hauteur"

    Hauteur_Value = InputBox("Merci d'indiquer la Hauteur .... ")
    Hauteur_Value = Replace(Hauteur_Value, ".", ",")
    If IsNumeric(Hauteur_Value) Then
        ValeurText = Replace(Hauteur_Value, ",", ".")
    Else
        MsgBox "Valeur invalide"
        Exit Sub
    End If
    
    If Not swModel Is Nothing Then
        Dim swEqMgr As SldWorks.EquationMgr
        Set swEqMgr = swModel.GetEquationMgr
        If SetEquationValue(swEqMgr, Variable, ValeurText) Then
            swModel.ForceRebuild3 True
        Else
            MsgBox "Failed to find the equation " & name
        End If
    Else
        MsgBox "Please open the model"
    End If

End Sub

Function SetEquationValue(eqMgr As SldWorks.EquationMgr, name As String, value As String) As Boolean
    Dim index As Integer
    index = GetEquationIndexByName(eqMgr, name)
    If index <> -1 Then
        eqMgr.Equation(index) = """" & name & """=" & """" & ValeurText & """"
        SetEquationValue = True
    Else
        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)
        If UCase(eqName) = UCase(Variable) Then
            GetEquationIndexByName = i
            Exit Function
        End If
    Next
End Function

Vriendelijke groeten

1 like

Een grote dank aan jullie 2 voor jullie feedback.

Roger, het is geweldig wat je me hebt gestuurd. Slechts 2 oplossingen om te maken:

Als UCase(eqName) = UCase(naam) Dan  is '********************** in plaats van Variabele

eqMgr.Equation(index) = """" & naam & """=" & """" & Waarde & """"                    ' ***************************in plaats van TextValue

 

kern dank je wel!