Modyfikowanie wartości zmiennej globalnej za pomocą makra w Solidworks

Witam

Używam okna dialogowego inputbox, aby zapytać o wysokość elementu (wartość zapisana w obszarze Wysokość)

Chciałbym, aby moja zmienna globalna, która jest również nazywana Height, pobierała tę wartość za pomocą makra. Jaka linia kodu na to pozwala?

Dziękujemy za Twoją opinię

Witam 

Ten Kodeks powinien Ci pomóc. 

Witam

Przepraszam, ale kręcę się w kółko. Nie mogę tego zrobić. Przeszedłem przez kod, ale niewiele z niego rozumiem... Przyznam, że pomocna dłoń byłaby mile widziana.

Dim Hauteur_Value As Liczba całkowita

Przyciemniona podwójna wysokość

Hauteur_Value = InputBox("Proszę określić wysokość .... ")

Mam więc zmienną globalną o nazwie "Wysokość". I po prostu chcę, aby ta zmienna przyjęła nową wartość (Hauteur_Value).

Dziękuję za twoje oświecenie

Witam 

W załączeniu jest podejście, (aby wprowadzić ułamki dziesiętne, musisz użyć vergo zamiast kropki), 

Z drugiej strony, wybrana funkcja wydaje się działać tylko z liczbami całkowitymi!? . 

 


img_20210915_164115.jpg
1 polubienie

Witam

EDIT: usunięcie kodu, ponieważ duplikuje on odpowiedź z @Lynk

Pozdrowienia

Witam

Po kilku uderzeniach w mojej poprzedniej odpowiedzi, oto funkcjonalny kod oparty na Lynku, ale który pozwala umieścić wartość dziesiętną, wartość, którą można wprowadzić w InputBox za pomocą kropki lub przecinka:

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

Pozdrowienia

1 polubienie

Wielkie podziękowania dla Was 2 za opinie.

Roger, wspaniale, co mi przysłałeś. Tylko 2 poprawki do wprowadzenia:

Jeśli UCase(eqName) = UCase(name) Then  '********************** zamiast Zmienna

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

 

Core Dziękuję!