Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Vorhandensein eines Parameters überprüfen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von KAME an!   Senden Sie eine Private Message an KAME  Schreiben Sie einen Gästebucheintrag für KAME

Beiträge: 152
Registriert: 21.06.2006

erstellt am: 04. Sep. 2014 08:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 04. Sep. 2014 12:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KAME 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von BernoAn an!   Senden Sie eine Private Message an BernoAn  Schreiben Sie einen Gästebucheintrag für BernoAn

Beiträge: 164
Registriert: 16.01.2014

erstellt am: 04. Sep. 2014 15:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KAME 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von KAME an!   Senden Sie eine Private Message an KAME  Schreiben Sie einen Gästebucheintrag für KAME

Beiträge: 152
Registriert: 21.06.2006

erstellt am: 04. Sep. 2014 15:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 04. Sep. 2014 18:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KAME 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von KAME an!   Senden Sie eine Private Message an KAME  Schreiben Sie einen Gästebucheintrag für KAME

Beiträge: 152
Registriert: 21.06.2006

erstellt am: 08. Sep. 2014 09:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Super Danke!!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz