Frage:
Wie kann man mit Hilfe der COM-Schnittstelle die Parameterliste bearbeiten?
Antwort:
Die Parameter eines Modell können über die Schnittstelle IModel (ab IModel3) modifiziert werden:
Sub test_parameter()
Dim iApp As RFEM5.Application
Set iApp = GetObject(, "RFEM5.Application")
iApp.LockLicense
Dim j As Integer
j = iApp.GetModelCount
Dim iMod As RFEM5.IModel3
Set iMod = iApp.GetActiveModel
On Error GoTo e
Dim formParams() As RFEM5.FormulaParameter
' get all formula parameters
formParams = iMod.GetFormulaParameters
' delete all formula parameters
iMod.CleanFormulaParameters
' set list of formula parameters
ReDim Preserve formParams(0 To UBound(formParams, 1) + 1)
formParams(UBound(formParams, 1)).Name = "p"
formParams(UBound(formParams, 1)).Unit = "m"
formParams(UBound(formParams, 1)).UnitType = LengthUnitType
formParams(UBound(formParams, 1)).Value = 0
formParams(UBound(formParams, 1)).ValueType = DoubleType
formParams(UBound(formParams, 1)).Comment = "new parameter"
formParams(UBound(formParams, 1)).Formula = "b/3"
formParams(UBound(formParams, 1)).RangeOfValues = "(3;5.5"
iMod.SetFormulaParameters formParams
e:
If Err.Number 0 Then MsgBox Err.description, vbCritical, Err.Source
iMod.GetApplication.UnlockLicense
Set iMod = Nothing
End Sub
Es können dabei nur alle Parameter ausgelesen werden mit Hilfe der Funktion GetFormulaParameters(). Die veränderten oder neuen Parameter können dann wieder als Liste übergeben werden mit der Funktion SetFormulaParameters(). Es können also keine einzelnen Parameter ausgelesen oder geschrieben werden.
Zu beachten ist, dass der Wert "Value" bezogen auf seinen Typ (ValueTyp) und seiner Einheit (Unit) innerhalb der definierten Grenzen (RangeOfValues) liegen muss, sonst wird eine Fehlermeldung ausgegeben. Falls der Wert berechnet wird, wie im Beispiel, ist der Wert irrelevant und der mit der Formel (Formula) berechnete Wert muss in den Grenzen liegen, falls Grenzen definiert sind.