| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Modellparameter mit VBA ändern? (3022 mal gelesen)
|
Heiko1985 Mitglied
Beiträge: 5 Registriert: 10.07.2014 Win 7 Enterprise, Autodesk Inventor 2014
|
erstellt am: 10. Jul. 2014 18:01 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin zwar schon ein langjähriger Inventor-Anwender, aber mit VBA habe ich im Inventor noch nie etwas gemacht. Aber genug von mir - jetzt zu meinem Problem. Mein IPT enthält diverse Modell- und Benutzerparameter. Dabei habe ich zwei Parametergruppen. Bei der einen Gruppe beginnen die Parameternamen mit "a_", bei der anderen mit "b_". Die eigentlichen Namen sind dann jeweils gleich. Mittels VBA (d. h. automatisiert) möchte ich die Parameter bearbeiten. Ich habe zwar VBA-Grundlagen, aber mir fehlt der Ansatz, wie ich auf die Parameter zugreifen kann. Konkret möchte ich folgendes machen: 1) Die Gleichungen einiger Parameter enthalten die Parameter, deren Namen mit "a_" beginnen. Dieses "a_" möchte ich in der Gleichung durch "b_" ersetzen. 2) Einige Parameter mit "a_" werden auch zum Unterdrücken einiger Komponenten verwendet. Hier möchte ich die "a_"-Parameter durch die "b_"-Parameter ersetzen. Das heißt, es müsste ausgelesen werden, welcher "a_"-Parameter verwendet wird, um dann den zugehörigen "b_"-Parameter zu setzen. 3) Anschließend möchte ich alle Parameter, die mit "a_" beginnen, löschen. Puh, hoffentlich habe ich mich verständlich ausgedrückt. Könnt ihr mir weiterhelfen? Vielen Dank schon einmal! Gruß, Heiko1985
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Heiko1985 Mitglied
Beiträge: 5 Registriert: 10.07.2014 Win 7 Enterprise, Autodesk Inventor 2014
|
erstellt am: 11. Jul. 2014 09:33 <-- editieren / zitieren --> Unities abgeben:
Die Gleichungen zu durchsuchen und "a_" durch "b_" zu ersetzen, ist mir mittlerweile gelungen, und zwar so: Code: Dim od As PartDocument Set od = ThisApplication.ActiveDocument Dim pa As ParameterFor Each pa In od.ComponentDefinition.Parameters Gleichung = pa.Expression If InStr(Gleichung, "a_") > 0 Then Gleichung = Replace(Gleichung, "a_", "b_") pa.Expression = Gleichung End If Next
Parameter löschen geht mit: Code: pa.Delete
Somit sind Punkt 1 und 3 gelöst. Aber Punkt 2 kriege ich nicht hin. Weiß jemand Rat? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 14. Jul. 2014 15:34 <-- editieren / zitieren --> Unities abgeben: Nur für Heiko1985
Hallo Heiko, sind denn a_Parameter und b_Parameter gleich? Soll heißen, dass das was hinter a_ bzw. b_ kommt ist der gleiche Inhalt. Z.B.: a_Tralala, b_Tralala Dann würde ein einfaches Abgleichen mittels String schon helfen. Gruß Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Heiko1985 Mitglied
Beiträge: 5 Registriert: 10.07.2014 Win 7 Enterprise, Autodesk Inventor 2014
|
erstellt am: 16. Jul. 2014 09:15 <-- editieren / zitieren --> Unities abgeben:
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 16. Jul. 2014 09:49 <-- editieren / zitieren --> Unities abgeben: Nur für Heiko1985
Hallo Heiko, kannst es mal damit probieren: Code: Sub Parameterabgleich()Dim oDoc As Inventor.Document Set oDoc = ThisApplication.ActiveDocument Dim oCompdef As ComponentDefinition Set oCompdef = oDoc.ComponentDefinition Dim Param As Parameter Dim Param_a As Parameter Dim Param_b As Parameter Dim Länge As Long Dim a As Integer Dim b As Integer a = 1 b = 2 On Error GoTo ERRORHÄNDLER For Each Param In oDoc.ComponentDefinition.Parameters Set Param_a = oCompdef.Parameters.Item(a) Set Param_b = oCompdef.Parameters.Item(b) If Left(Param_a.name, 1) = "a" Then Länge = Len(Param_a.name) If Right(Param_a.name, Länge - 2) = Right(Param_b.name, Länge - 2) Then Param_b.Value = Param_a.Value Else b = b + 1 End If End If a = a + 1 Next oDoc.Update2 Exit Sub ERRORHÄNDLER: MsgBox "Ein Fehler ist aufgetreten", vbOKOnly, "ACHTUNG!" End Sub
Gruß Chris
[Diese Nachricht wurde von Chris 31 am 16. Jul. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Heiko1985 Mitglied
Beiträge: 5 Registriert: 10.07.2014 Win 7 Enterprise, Autodesk Inventor 2014
|
erstellt am: 16. Jul. 2014 13:23 <-- editieren / zitieren --> Unities abgeben:
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 16. Jul. 2014 14:54 <-- editieren / zitieren --> Unities abgeben: Nur für Heiko1985
|
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Alienware m17x, Win7, Inventor2012
|
erstellt am: 16. Jul. 2014 15:19 <-- editieren / zitieren --> Unities abgeben: Nur für Heiko1985
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 16. Jul. 2014 15:31 <-- editieren / zitieren --> Unities abgeben: Nur für Heiko1985
hey Igor, ich hab das nur kurz getestet mit nem kleinen BT mit nur 8 Parametern. Dort hat es ohne Probleme funktioniert. Man kann das ganze sicher noch deutlich schöner und auch zu absolut 100% machen. Ich sehe aber gerade, dass man ja den b_Parameter (x) wieder zurücksetzen müsste, sobald er den nächsten a_Parameter abfährt. Gruß Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Alienware m17x, Win7, Inventor2012
|
erstellt am: 16. Jul. 2014 16:12 <-- editieren / zitieren --> Unities abgeben: Nur für Heiko1985
Zitat: Original erstellt von Chris 31:
Ich sehe aber gerade, dass man ja den b_Parameter (x) wieder zurücksetzen müsste, sobald er den nächsten a_Parameter abfährt.Gruß Chris
Vor allem wird der a Parameter Index jedes Mal erhöht, so setzt die Logik voraus, dass sich Parameter b niemals in der Liste vor dem Parameter a befinden darf? Oder liege ich da falsch? Was ich oben meinte ist so Etwas (nicht getestet): Code:
Sub Parameterabgleich() Dim oDoc As Inventor.Document Set oDoc = ThisApplication.ActiveDocument Dim oCompdef As ComponentDefinition Set oCompdef = oDoc.ComponentDefinition Dim Param_a As Parameter Dim Param_b As Parameter On Error GoTo ERRORHÄNDLER For Each Param_a In oDoc.ComponentDefinition.Parameters For Each Param_b In oDoc.ComponentDefinition.Parameters If Param_a.Name <> Param_b.Name Then If Left(Param_a.Name, 1) = "a" Then Länge = Len(Param_a.Name) If Right(Param_a.Name, Länge - 2) = Right(Param_b.Name, Länge - 2) Then Param_b.Value = Param_a.Value End If End If End If Next Next oDoc.Update2 Exit Sub ERRORHÄNDLER: MsgBox "Ein Fehler ist aufgetreten", vbOKOnly, "ACHTUNG!" End Sub
------------------ Grüße Igor FX64 Software Solutions - Inventor Tools FX64 LambdaSpect - Lichtsimulation mit Autodesk Inventor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 16. Jul. 2014 16:17 <-- editieren / zitieren --> Unities abgeben: Nur für Heiko1985
|
Heiko1985 Mitglied
Beiträge: 5 Registriert: 10.07.2014 Win 7 Enterprise, Autodesk Inventor 2014
|
erstellt am: 17. Jul. 2014 16:01 <-- editieren / zitieren --> Unities abgeben:
Ich habe mittlerweile eine Lösung gefunden: Code: Dim od As PartDocument Set od = ThisApplication.ActiveDocumentDim compDef As ComponentDefinition Set compDef = od.ComponentDefinition Dim param As Inventor.Parameter Dim compareType As ComparisonTypeEnum Dim expr As Variant Dim feat As PartFeature For Each feat In compDef.Features Set param = compDef.Parameters(1) If feat.GetSuppressionCondition(param, compareType, expr) Then oldName = param.name If Mid(oldName, Len(oldName) - 1, Len(oldName)) = "_A" Then Dim newName As String newName = Replace(oldName, "_A", "_B") feat.SetSuppressionCondition compDef.Parameters(newName), compareType, expr End If End If Next
Danke nochmals für eure Hilfe! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |