Ändern des Werts einer globalen Variablen über ein Makro in Solidworks

Hallo

Ich verwende einen Eingabefeld-Dialog, um die Höhe eines Elements anzufordern (Wert unter Höhe gespeichert)

Ich möchte, dass meine globale Variable, die auch Height genannt wird, diesen Wert über ein Makro annimmt. Welche Codezeile lässt dies zu?

Vielen Dank für Ihr Feedback

Hallo 

Dieser Code sollte Ihnen helfen. 

Hallo

Es tut mir leid, aber ich drehe mich im Kreis. Ich kann es nicht. Ich bin den Code durchgegangen, aber ich verstehe nicht viel darüber... Ich gebe zu, dass eine helfende Hand dankbar wäre.

Hauteur_Value als Ganzzahl dimmen

Doppelte Höhe dimmen

Hauteur_Value = InputBox("Bitte geben Sie die Höhe an .... ")

Also habe ich eine globale Variable namens "Height". Und ich möchte nur, dass diese Variable den neuen Wert (Hauteur_Value) annimmt.

Vielen Dank für Ihre Erleuchtung

Hallo 

Beigefügt ist ein Ansatz, (um Dezimalzahlen einzuführen, müssen Sie den Vergo und nicht den Punkt verwenden), 

Auf der anderen Seite scheint die ausgewählte Funktion nur mit ganzen Zahlen zu funktionieren!? . 

 


img_20210915_164115.jpg
1 „Gefällt mir“

Hallo

EDIT: Löschen des Codes, da er die Antwort von @Lynk dupliziert

Herzliche Grüße

Hallo

Nach ein paar Unebenheiten in meiner vorherigen Antwort ist hier ein funktionaler Code, der auf dem von Lynk basiert, es Ihnen jedoch ermöglicht, einen Dezimalwert einzugeben, einen Wert, der entweder mit einem Punkt oder mit einem Komma in die InputBox eingegeben werden kann:

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

Herzliche Grüße

1 „Gefällt mir“

Ein großes Dankeschön an euch 2 für euer Feedback.

Roger, es ist toll, was du mir geschickt hast. Nur 2 Korrekturen müssen vorgenommen werden:

if UCase(eqName) = UCase(name) then  '********************** statt Variable

eqMgr.Equation(index) = """" & name & """=" & """" & Value & """"                    ' ***************************anstelle von TextValue

 

Großer Dank!