Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Modellparameter mit VBA ändern?

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:  Modellparameter mit VBA ändern? (3022 mal gelesen)
Heiko1985
Mitglied


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

Beiträge: 5
Registriert: 10.07.2014

Win 7 Enterprise, Autodesk Inventor 2014

erstellt am: 10. Jul. 2014 18:01    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 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


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

Beiträge: 5
Registriert: 10.07.2014

Win 7 Enterprise, Autodesk Inventor 2014

erstellt am: 11. Jul. 2014 09:33    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

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 Parameter

For 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


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

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 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 Heiko1985 10 Unities + Antwort hilfreich

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


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

Beiträge: 5
Registriert: 10.07.2014

Win 7 Enterprise, Autodesk Inventor 2014

erstellt am: 16. Jul. 2014 09:15    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

Ja, hinter a_ bzw. b_ sind die Namen der Parameter gleich.

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

Chris 31
Mitglied
Konstrukteur und Mädchen für alles


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

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 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 Heiko1985 10 Unities + Antwort hilfreich

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


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

Beiträge: 5
Registriert: 10.07.2014

Win 7 Enterprise, Autodesk Inventor 2014

erstellt am: 16. Jul. 2014 13:23    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

Jo, merci vielmals.

Leider habe ich noch immer Probleme mit Punkt 2) ...

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

Chris 31
Mitglied
Konstrukteur und Mädchen für alles


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

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 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 Heiko1985 10 Unities + Antwort hilfreich

genau das habe ich dir doch gegeben

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Alienware m17x, Win7, Inventor2012

erstellt am: 16. Jul. 2014 15:19    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 Heiko1985 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Chris 31:
genau das habe ich dir doch gegeben

Chris,

bist du dir wirklich sicher, dass deine ForEach Logik richtig ist? Ich habe es jetzt nur kurz im Kopf "getestet" und irgendwie geht das nicht ganz auf. Wäre es nicht besser zwei verschachtelte ForEach schleifen zu benutzen (äußere für a und innere für b), sodass wirklich jeder a Parameter gegen jeden b Parameter verglichen wird?

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


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

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 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 Heiko1985 10 Unities + Antwort hilfreich

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




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

Beiträge: 3497
Registriert: 01.08.2002

Alienware m17x, Win7, Inventor2012

erstellt am: 16. Jul. 2014 16:12    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 Heiko1985 10 Unities + Antwort hilfreich

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


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

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 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 Heiko1985 10 Unities + Antwort hilfreich

Hatte fälschlicherweise die Annahme, dass die Parameter nach Alphabet geordnet seien.
Das ist nicht so, wie ich gerade gesehen habe. dann geht das von mir natürlich nicht.

Gruß Chris

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

Heiko1985
Mitglied


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

Beiträge: 5
Registriert: 10.07.2014

Win 7 Enterprise, Autodesk Inventor 2014

erstellt am: 17. Jul. 2014 16:01    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

Ich habe mittlerweile eine Lösung gefunden:

Code:
Dim od As PartDocument
Set od = ThisApplication.ActiveDocument

Dim 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

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