| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Vorhandensein eines Parameters überprüfen (2693 mal gelesen)
|
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 04. Sep. 2014 08:47 <-- editieren / zitieren --> Unities abgeben:
Hallo CAD-Community, ich komme bei einem (wahrscheinlich kleinem) Problem nicht weiter. Und zwar will ich in einem Bauteil oder einer Baugruppe überprüfen ob ein Parameter vorhanden ist; wenn JA dann soll dieser ein Exportparameter sein und wenn nicht vorhanden, soll er zuerst erstellt und dann als Exportparameter gesetzt sein. Hier mein Code bis jetzt: Code:
Option Explicit Public Sub Parameter()Dim oDoc As Inventor.Document Set oDoc = ThisApplication.ActiveDocument Dim oParams As Inventor.Parameters Set oParams = oDoc.ComponentDefinition.Parameters Dim oparam As Parameter For Each oparam In oParams.UserParameters If oparam.Name = "L" Then oParams.UserParameters.item("L").ExposedAsProperty = True Exit For Else oParams.UserParameters.AddByValue "L", 0, kMillimeterLengthUnits oParams.UserParameters.item("L").ExposedAsProperty = True Exit For End If Next End Sub
Ich hoffe Ihr könnt mir schnell helfen. Vielen Dank im voraus. MfG, Joscha Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 04. Sep. 2014 12:57 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
Hallo Ohne den Code getestet zu haben, wo ist das Problem? Auf den ersten sehe ich keinen Fehler. Außer das es ein Problem geben könnte mit der Deklaration von oDoc als Document. Das könnte zu allgemein sein, da Zeichnungen keine Parameter kennen. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BernoAn Mitglied
Beiträge: 164 Registriert: 16.01.2014
|
erstellt am: 04. Sep. 2014 15:34 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
Wie gefällt dir das ? Wenn noch kein Userparameter erstellt wurde erst ein "Dummy" erstellen, dann funktioniert es bestens :-) Code:
Public Sub Parameter() Dim oDoc As Inventor.Document Set oDoc = ThisApplication.ActiveDocument Dim oParams As Inventor.Parameters Set oParams = oDoc.ComponentDefinition.Parameters Dim oparam As Parameter If oParams.UserParameters.Count = 0 Then oParams.UserParameters.AddByValue "dummy", 0, kMillimeterLengthUnits oParams.UserParameters.Item("dummy").ExposedAsProperty = False End If For Each oparam In oParams.UserParameters If oparam.Name = "L" Then oParams.UserParameters.Item("L").ExposedAsProperty = True Exit For Else oParams.UserParameters.AddByValue "L", 0, kMillimeterLengthUnits oParams.UserParameters.Item("L").ExposedAsProperty = True Exit For End If Next End Sub
Gruß Berno
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 04. Sep. 2014 15:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, das Problem ist, dass das Macro nichts macht. Weder einen Parameter anleget noch eine Fehlermeldung ausgibt. Wenn ich jetzt den fett markierten Teil im Code weg lasse funktioniert es. (teilweise) Nur dann durchsucht er jede Art von Parametern (Modellparameter, Referenzparameter,etc) und jedes mal wenn er keinen Parameter in jener Kategorie findet erzeugt er einen neuen (L_1, L_1_2, etc). Aber ich will, dass er ja nur die Userparameter durchsucht. Darum habe ich bei dem vorherigen Code das .UserParameters hinzugefügt. Code:
Option Explicit Public Sub Parameter()Dim oDoc As Inventor.Document Set oDoc = ThisApplication.ActiveDocument Dim oParams As Inventor.Parameters Set oParams = oDoc.ComponentDefinition.Parameters Dim oparam As Parameter For Each oparam In oParams.UserParameters If oparam.Name = "L" Then oParams.UserParameters.item("L").ExposedAsProperty = True Exit For Else oParams.UserParameters.AddByValue "L", 0, kMillimeterLengthUnits oParams.UserParameters.item("L").ExposedAsProperty = True Exit For End If Next End Sub
Ich hoffe ich hab mich verständlich ausdrücken können MfG, Joscha Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 04. Sep. 2014 18:52 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
Hallo Hab den Code jetzt mal ausprobieren können. Im 2014er funktioniert der problemlos. Bis auf das lauter fortlaufend numerierte L-Parameter angelegt werden, bis er L findet. Kannst du mal den hier probieren? Und wenn der auch nichts macht, setz mal einen Haltepunkt möglichst weit am Anfang, geh mit F8 schrittweise durch und prüf mal ob die Variablen alle korrekt gefüllt werden. Code: Option Explicit Public Sub Parameter()Dim oDoc As Inventor.Document Set oDoc = ThisApplication.ActiveDocument Dim oParams As Inventor.Parameters Set oParams = oDoc.ComponentDefinition.Parameters Dim oparam As Parameter Dim bFound As Boolean For Each oparam In oParams.UserParameters If oparam.Name = "L" Then bFound = 1 End If Next If bFound Then Set oparam = oParams.UserParameters.Item("L") Else Set oparam = oParams.UserParameters.AddByValue("L", 0, kMillimeterLengthUnits) End If oparam.ExposedAsProperty = True End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 08. Sep. 2014 09:57 <-- editieren / zitieren --> Unities abgeben:
|