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?
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.
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