| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: iLogic (5749 mal gelesen)
|
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 02. Jun. 2016 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
|
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: 02. Jun. 2016 15:03 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
|
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: 02. Jun. 2016 15:13 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
OK, habe den Fehler gefunden! Wir versuchen die ganze Zeit den Wert des Liste direkt dem als RenderStyle definierten oRenderstyle zu zuweisen. Das geht natürlich nicht. Richtigerweise müsste es also heißen: Code: 'Dem Platzhalter die ausgewählte Farbe zuweisen Dim oRenderstyle As RenderStyle Set oRenderstyle = oDoc.RenderStyles.Item(oDoc.ComponentDefinition.Parameters.Item("Korpusfarbe").Value)
Dann sollte es aber eigentlich funtionieren. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 02. Jun. 2016 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Super das hat geklappt aber Laufzeitfehler 438 Objekt unterstützt diese Eigenschaft oder Methode nicht und zwar bei If oPart.PropertySets.Item("Document Summary Information").Item("Part Number").Value = "11111" Then Ich hab zum Teste, "Part Number" durch "Category ersetzt, gleiches Problem. Value durch Expression. hat beides nicht geholfen. aber wir kommen der Lösung näher 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: 02. Jun. 2016 16:12 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
|
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 02. Jun. 2016 16:23 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
leider nicht, das ist nochmal der ganze Code. Er bringt die gleiche Fehlermeldung Code: Public Sub Farbe() Dim oDoc As AssemblyDocument Set oDoc = ThisApplication.ActiveDocument 'Dem Platzhalter die ausgewählte Farbe zuweisen Dim oRenderstyle As RenderStyle Set oRenderstyle = oDoc.RenderStyles.Item(oDoc.ComponentDefinition.Parameters.Item("Korpusfarbe").Value) Dim oPart As ComponentOccurrence 'Alle Teile der BG durchlaufen For Each oPart In oDoc.ComponentDefinition.Occurrences If oPart.PropertySets.Item("Design Tracking Properties").Item("Part Number").Expression = "11111" Then 'Farbe setzen oPart.SetRenderStyle kOverrideRenderStyle, oRenderstyle End If Next End Sub Worin besteht der Unterschied zwischen ("Document Summary Information") und ("Design Tracking Properties") ??? [Diese Nachricht wurde von Joe25 am 02. Jun. 2016 editiert.] 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: 03. Jun. 2016 07:41 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Den genauen Unterschied kann ich dir leider auch nicht erklären. Ich weiß nur, dass sie Inventorintern anders genutzt werden. Hier ein Link zu der Übersicht, welches iProp wo zu finden ist. Ich hab deinen Code mal ein bisschen verändert: Code: Public Sub Farbe() Dim oDoc As AssemblyDocument Set oDoc = ThisApplication.ActiveDocument'Dem Platzhalter die ausgewählte Farbe zuweisen Dim oRenderstyle As Renderstyle Set oRenderstyle = oDoc.RenderStyles.Item(oDoc.ComponentDefinition.Parameters.Item("Korpusfarbe").Value) Dim oPart As ComponentOccurrence Dim oPropset As propertyset Dim oSub As Document 'Alle Teile der BG durchlaufen For Each oPart In oDoc.ComponentDefinition.Occurrences Set oSub = ThisApplication.Documents.Open(oPart.ReferencedDocumentDescriptor.FullDocumentName, False) If oPart.PropertySets.Item("Design Tracking Properties").Item("Part Number").Expression = "11111" Then 'Farbe setzen oPart.SetRenderStyle kOverrideRenderStyle, oRenderstyle End If oSub.Close Next End Sub
Man kann nicht auf die Properties einer ComponentOccurence direkt zugreifen. Deswegen der Umweg über das unsichtbare öffnen des Teils. Bei dem (wirklich nur seeeeeeehr kurzen) Test bei mir ist es ohne Probleme durchgelaufen.
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 03. Jun. 2016 09:11 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Hi Chris, es läuft nachdem ich If oPart.PropertySets..... in If oSub.PropertySets geändert dann ging es Problemlos. Kurz überlegt und dann drauf gekommen das er ja in dem geöffnetem Bauteil suchen soll... Vielen vielen Dank 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: 03. Jun. 2016 09:13 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
|
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 03. Jun. 2016 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Hey Chris ich hab nochmal eine Frage, es kann ja vorkommen das ich in meiner Baugruppe eine Unterbaugruppe (bestehend aus Bauteilen) eingefügt habe. Dann sucht mein Makro in der Unterbaugruppe nach dem IPropertie,(aber nicht in den Bauteilen der Unterbaugruppe) Ich habe gerade versucht das Makro zu erweitern, dass er auch auf die Bauteile der Unterbaugruppe zugreift. (Der obere Teil des Makros habe ich nicht reinkopiert, da dieser Unverändert bleibt. Code:
'Alle Teile der BG durchlaufen For Each oPart In oDoc.ComponentDefinition.Occurrences Set oSub = ThisApplication.Documents.Open(oPart.ReferencedDocumentDescriptor.FullDocumentName, False) If oSub.FullDocumentName = DocumentName & ".iam" ThenDim oSub2 As Document Set oSub2 = oSub.Documents.Open(oPart.ReferencedDocumentDescriptor.FullDocumentName, False) If oSub2.PropertySets.Item("Design Tracking Properties").Item("Part Number").Expression = "1111" Then 'Farbe setzen oPart.SetRenderStyle kOverrideRenderStyle, oRenderstyle oSub2.Close Else If oSub.PropertySets.Item("Design Tracking Properties").Item("Part Number").Expression = "1111" Then 'Farbe setzen oPart.SetRenderStyle kOverrideRenderStyle, oRenderstyle End If End If End If oSub.Close Next End Sub
Es funktioniert noch nicht ganz, mein Problem ist der Abgleich ob "oSub" eine .IAM ist oder nicht und das er dann die Referenzierten Bauteile der Unterbaugruppe öffnet. Hast du ein Tipp? [Diese Nachricht wurde von Joe25 am 03. Jun. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 09. Jun. 2016 09:25 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
|
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. Jun. 2016 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Hallo Joe, Das ist gar kein Problem.... Code: Public Sub Farbeaendern()Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.ActiveDocument Dim oRenderstyle As Renderstyle Set oRenderstyle = oAssDoc.RenderStyles.Item(odoc.ComponentDefinition.Parameters.Item("Korpusfarbe").Value) Dim oOccurrence As ComponentOccurrence Dim oPath As String For Each oOccurrence In oAssDoc.ComponentDefinition.Occurrences If oOccurrence.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOccurrence.DefinitionDocumentType = kPartDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call bauteil(oPath, oRenderstyle) End If Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Sub Private Function baugruppe(ByVal oPath As String, ByVal oRenderstyle As Renderstyle) Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.Documents.Open(oPath, False) Dim oOcc As ComponentOccurrence For Each oOccurrence In oAssDoc.ComponentDefinition.Occurrences If oOccurrence.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOccurrence.DefinitionDocumentType = kPartDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call bauteil(oPath, oRenderstyle) End If Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Function Private Function bauteil(ByVal oPath As String, ByVal oRenderstyle As Renderstyle) Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Open(oPath) If oPartDoc.PropertySets.Item("Design Tracking Properties").Item("Part Number").Expression = "11111" Then oPartDoc.SetRenderStyle kOverrideRenderStyle, oRenderstyle End If oPartDoc.Update2 oPartDoc.Save2 oPartDoc.Close End Function
Habe ich nur kurz umgeschrieben. Nicht getestet! Bei Fehlermeldungen bitte melden. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 14. Jun. 2016 14:10 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Kein Problem klingt gut aber noch bringt er mir eine Fehlermeldung in Zeile 5 Code: Set oRenderstyle = oAssDoc.RenderStyles.Item(odoc.ComponentDefinition.Parameters.Item("Korpusfarbe").Value)
Laufzeitfehler 424 Objekt nicht gefunden Ich habe gerade nochmal die Schreibweise des Parameters geprüft, der stimmt. Was mir aber gerade aufgefallen ist... Beim zweiten Abschnitt Private Function Baugruppe schreibst du ja Code: Dim oOcc As ComponentOccurrence
müsste dann die "for Each" und die "If" abfrage nicht auf "oOcc" beziehen anstatt auf "oOccurrence" ??? (Hab es getestet, Fehlermeldung besteht weiterhin) Schon mal Danke für die Hilfe.
[Diese Nachricht wurde von Joe25 am 14. Jun. 2016 editiert.] 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. Jun. 2016 16:13 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Habs mal ausgebessert. So sollte es jetzt durchlaufen: Code: Public Sub Farbeaendern() Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.ActiveDocument Dim oRenderstyle As Renderstyle Set oRenderstyle = oAssDoc.RenderStyles.Item(oAssDoc.ComponentDefinition.Parameters.Item("Korpusfarbe").Value) Dim oOccurrence As ComponentOccurrence Dim oPath As StringFor Each oOccurrence In oAssDoc.ComponentDefinition.Occurrences If oOccurrence.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOccurrence.DefinitionDocumentType = kPartDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call bauteil(oPath, oRenderstyle) End If Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Sub Private Function baugruppe(ByVal oPath As String, ByVal oRenderstyle As Renderstyle) Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.Documents.Open(oPath, False) Dim oOcc As ComponentOccurrence For Each oOcc In oAssDoc.ComponentDefinition.Occurrences If oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOcc.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOcc.DefinitionDocumentType = kPartDocumentObject Then oPath = oOcc.ReferencedDocumentDescriptor.FullDocumentName Call bauteil(oPath, oRenderstyle) End If Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Function Private Function bauteil(ByVal oPath As String, ByVal oRenderstyle As Renderstyle) Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Open(oPath, False) If oPartDoc.PropertySets.Item("Design Tracking Properties").Item("Part Number").Expression = "11111" Then oPartDoc.SetRenderStyle kOverrideRenderStyle, oRenderstyle End If oPartDoc.Update2 oPartDoc.Save2 oPartDoc.Close End Function
------------------ MFG Chris [Diese Nachricht wurde von Chris 31 am 14. Jun. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 14. Jun. 2016 16:38 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
|
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: 15. Jun. 2016 11:21 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Ok, dann probieren wir es eben so: Code: Option ExplicitPublic Sub Farbeaendern() Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.ActiveDocument Dim oRenderstyle As Renderstyle Set oRenderstyle = oAssDoc.RenderStyles.Item(odoc.ComponentDefinition.Parameters.Item("Korpusfarbe").Value) Dim oOccurrence As ComponentOccurrence Dim oPath As String For Each oOccurrence In oAssDoc.ComponentDefinition.Occurrences If oOccurrence.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOccurrence.DefinitionDocumentType = kPartDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call bauteil(oPath, oRenderstyle) End If Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Sub Private Function baugruppe(ByVal oPath As String, ByVal oRenderstyle As Renderstyle) Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.Documents.Open(oPath, False) Dim oOcc As ComponentOccurrence For Each oOccurrence In oAssDoc.ComponentDefinition.Occurrences If oOccurrence.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOccurrence.DefinitionDocumentType = kPartDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName If bauteil(oPath) = "YES" Then oOccurrence.SetRenderStyle kOverrideRenderStyle, oRenderstyle End If Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Function Private Function bauteil(ByVal oPath As String) As String Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Open(oPath) Dim StrPartNumber As String If oPartDoc.PropertySets.Item("Design Tracking Properties").Item("Part Number").Expression = "11111" Then oPartDoc.Close bauteil = "Yes" Else oPartDoc.Close bauteil = "No" End If End Function
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 15. Jun. 2016 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Hi Chris, in Zeile 6 habe ich oDoc in oAssDoc geändert (da die Variable ja nicht zugewiesen wurde) Danach hängt er bei Zeile 20
Code: Call bauteil(oPath, oRenderstyle)
Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft In Zeile 57 deklarierst du StrPartNumber, aber benutzt sie nirgends. Absicht? 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: 15. Jun. 2016 14:47 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Sorry, das passiert, wenn man im Stress ist Nochmal ausgebessert: Code:
Public Sub Farbeaendern() Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.ActiveDocument Dim oRenderstyle As Renderstyle Set oRenderstyle = oAssDoc.RenderStyles.Item(oAssDoc.ComponentDefinition.Parameters.Item("Korpusfarbe").Value) Dim oOccurrence As ComponentOccurrence Dim oPath As String For Each oOccurrence In oAssDoc.ComponentDefinition.Occurrences If oOccurrence.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOccurrence.DefinitionDocumentType = kPartDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName If bauteil(oPath) = "YES" Then oOccurrence.SetRenderStyle kOverrideRenderStyle, oRenderstyle End If End If Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Sub Private Function baugruppe(ByVal oPath As String, ByVal oRenderstyle As Renderstyle) Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.Documents.Open(oPath, False) Dim oOccurrence As ComponentOccurrence For Each oOccurrence In oAssDoc.ComponentDefinition.Occurrences If oOccurrence.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOccurrence.DefinitionDocumentType = kPartDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName If bauteil(oPath) = "YES" Then oOccurrence.SetRenderStyle kOverrideRenderStyle, oRenderstyle End If End If Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Function Private Function bauteil(ByVal oPath As String) As String Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Open(oPath, False) If oPartDoc.PropertySets.Item("Design Tracking Properties").Item("Part Number").Expression = "11111" Then oPartDoc.Close bauteil = "Yes" Else oPartDoc.Close bauteil = "No" End If End Function
------------------ MFG Chris [Diese Nachricht wurde von Chris 31 am 15. Jun. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 16. Jun. 2016 12:52 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Hi Chris, das sollte keine Kritik sein. Ich will ja was lernen und schau mir deshalb den Code genau an. Da ist es mir halt aufgefallen... Ich bin ja froh das du mir hilfst. Leider jammert er im zweiten Abschnitt in Zeile 41
Code: oPath = Occurrence.ReferencedDocumentDescriptor.FullDocumentName
Laufzeitfehler 91 Objektvariable oder With-Blockvariable nicht festgelegt
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. Jun. 2016 13:18 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Hi Joe, in deinem Code-Ausschnitt fehlt das o in oOccurrence. sollte eigentlich heißen: Code: oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName
Falls das kein Kopierfehler ist, dann poste doch bitte mal deinen kompletten Code, damit ich nen Fehler suchen kann. Bei mir läuft der Code anstandslos durch. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 16. Jun. 2016 13:57 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
das da oben war mein Fehler...
Code:
Public Sub Farbeaendern()Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.ActiveDocument Dim oRenderstyle As RenderStyle Set oRenderstyle = oAssDoc.RenderStyles.Item(oAssDoc.ComponentDefinition.Parameters.Item("Korpusfarbe").Value) Dim oOccurrence As ComponentOccurrence Dim oPath As String For Each oOccurrence In oAssDoc.ComponentDefinition.Occurrences If oOccurrence.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOccurrence.DefinitionDocumentType = kPartDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName If bauteil(oPath) = "YES" Then oOccurrence.SetRenderStyle kOverrideRenderStyle, oRenderstyle End If End If Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Sub Private Function baugruppe(ByVal oPath As String, ByVal oRenderstyle As RenderStyle) Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.Documents.Open(oPath, False) Dim oOccurrence As ComponentOccurrence For Each oOccurrence In oAssDoc.ComponentDefinition.Occurrences If oOccurrence.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOccurrence.DefinitionDocumentType = kPartDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName If bauteil(oPath) = "YES" Then oOccurrence.SetRenderStyle kOverrideRenderStyle, oRenderstyle End If End If Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Function Private Function bauteil(ByVal oPath As String) As String Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Open(oPath, False) If oPartDoc.PropertySets.Item("Design Tracking Properties").Item("Part Number").Expression = "11111" Then oPartDoc.Close bauteil = "Yes" Else oPartDoc.Close bauteil = "No" End If End Function
das ist normal dein Code 1:1 rüberkopiert Irgendwelche Verweise (also Extras -> Verweise) die ich aktivieren muss oder sowas?
[Diese Nachricht wurde von Joe25 am 16. Jun. 2016 editiert.] 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: 17. Jun. 2016 11:16 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Hallo Joe, eigentlich musst du keine Verweise aktivieren. In dem Code kann ich keinen Fehler erkennen. Mir scheint, dass irgendwas in der Unterbaugruppe nicht stimmt. Füge doch mal über der Fehlerzeile folgendes ein: Code: Debug.Print (oOccurrence.Name)
Und blende dir den Direktbereich ein. Dann schau mal, bei welcher Baugruppe er da meckert und was das denn für eine ist. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 17. Jun. 2016 12:57 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
er hat Probleme mit einer Schweißkonstruktion. Ich denk das sind die Schweißnähte oder so. Genau hab ich das noch nicht untersucht, kommt aber noch. Ich habe zum Testen die Unterbaugruppe entfernt, dann läuft es durch. Das größere Problem ist aber das er die Farbe nicht zuweist Er rechnet und rechnet aber nichts passiert. Die Bedingung (Bauteilenummer) hab ich nochmal geprüft die sind richtig eingetragen... Die Farbe ist richtig geschrieben, die passt auch.
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: 17. Jun. 2016 13:06 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Versuchs mal, wenn du die Farbe direkt in den Code einträgst: z.B.: Code: Set oRenderstyle = oAssDoc.RenderStyles.Item("Magenta")
Dann schaust mal, ob sich dann was ändert. Wenn ja, dann müssen wir an der Zuweisung durch den Parameter noch was machen. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 17. Jun. 2016 13:22 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
ich hab es gerade mit 2 verschiedenen Farben probiert, mag er beides nicht. Ich weiß nicht ob das eine Rolle spielt, Parameter sind MultiValue Parameter mit den zulässigen Farbmöglichkeiten. Bisher habe ich es immer über Extras -> "Komponente suchen" gemacht, dann waren alle gefundenen Bauteile markiert und ich habe die Farbe dann von Hand zugewiesen. Kann man die suche nicht ansteuern damit alle Komponenten markiert sind und dann die Farbe so zuweisen?
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: 17. Jun. 2016 14:13 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Probieren kannst du eventuell noch mit: Code: Set oRenderstyle = oDoc.RenderStyles.Item(oAssDoc.ComponentDefinition.Parameters.Item("Korpusfarbe").Expression)
Hast du mal versucht eine Farbe in den Code von Hand einzutragen? Macht er es dann auch nicht? Das Problem wäre ja, dass der Weg über die Suche ja dann den gleichen Weg mit der Zuweisung der Farben gehen würde. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 17. Jun. 2016 14:55 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Ja ich habe die Farbe fest zugewiesen wie du oben gemeint hast (mit Farbe Magenta, schwarz, grün) ging dennoch nicht. Mit Expression am Ende bringt er gleich eine Fehlermeldung. Das funktioniert auch nicht. Aber wenn es nicht möglich ist die Farbe so zuzuweisen lassen wir es.
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: 20. Jun. 2016 07:36 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
|
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 20. Jun. 2016 13:59 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Ich versuche gerade den Fehler zu finden. Mein Gedanke war zu erfahren ob er mir alle Bauteile findet, die unserem Kriterium entsprechen... Ich hab eine Zeile eingefügt damit er mir die Dateinamen ausspuckt die unserer Abfrage entsprechen. Das funktioniert auch soweit und findet alle Teile. Code: Private Function bauteil(ByVal oPath As String) As String Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Open(oPath, False)If oPartDoc.PropertySets.Item("Design Tracking Properties").Item("Part Number").Expression = "11111" Then oPartDoc.Close Debug.Print (oPartDoc.FullDocumentName) <----- bauteil = "Yes" Else oPartDoc.Close bauteil = "No" End If End Function
Wenn ich die "Debug Print" Zeile über die Farbzuweisung reinschreibe um zu sehen welche Dateien er mir zuweisen sollte, findet er keine Dateien. Wenn ich also jetzt nicht ganz auf der Leitung stehe, geht durch die If Abfrage (bei der Farbzuweisung) nichts durch. Oder?
Code: Private Function baugruppe(ByVal oPath As String, ByVal oRenderstyle As RenderStyle)Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.Documents.Open(oPath, False) Dim oOccurrence As ComponentOccurrence For Each oOccurrence In oAssDoc.ComponentDefinition.Occurrences If oOccurrence.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOccurrence.DefinitionDocumentType = kPartDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName If bauteil(oPath) = "YES" Then Debug.Print (oAssDoc.FullDocumentName) <----- oOccurrence.SetRenderStyle kOverrideRenderStyle, oRenderstyle End If End If Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Function
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: 20. Jun. 2016 15:06 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Ok, versuchen wir es mal so: ersetze mal bitte die function mit dem hier: Code: Private Function bauteil(ByVal oPath As String) As String Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Open(oPath, False)If oPartDoc.PropertySets.Item("Design Tracking Properties").Item("Part Number").Expression = "11111" Then oPartDoc.Close bauteil = "Yes" Exit Function Else oPartDoc.Close bauteil = "No" Exit Function End If End Function
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 20. Jun. 2016 15:20 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
|
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: 20. Jun. 2016 15:42 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
OK, wir sind offensichtlich beide ein wenig blind In der Function ist der Rückgabewert "Yes" und "No" klein geschrieben. Als Rückgabewert wird aber immer ein "YES" erwartet. Also alle gleich schreiben, dann sollte es auch gehen... ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joe25 Mitglied
Beiträge: 20 Registriert: 02.06.2016
|
erstellt am: 21. Jun. 2016 07:48 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Chris du bist echt ein VBA-Gott It works. Vielen vielen Dank schon mal, das erleichtert einem sehr die Arbeit. Eine letzte Frage hätte ich noch. Er hat ja Probleme mit den Schweißkonstruktionen, gibt es ein Befehl bei dem er das Bauteil/Baugruppe überspringt falls er ein Fehler hat?
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: 21. Jun. 2016 09:31 <-- editieren / zitieren --> Unities abgeben: Nur für Sheriff
Hey Joe, schön, dass es jetzt läuft. Für das überspringen von Fehler-Baugruppen könntest du so vorgehen:
Code: Public Sub Farbeaendern()Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.ActiveDocument Dim oRenderstyle As Renderstyle Set oRenderstyle = oAssDoc.RenderStyles.Item(oAssDoc.ComponentDefinition.Parameters.Item("Korpusfarbe").Value) Dim oOccurrence As ComponentOccurrence Dim oPath As String For Each oOccurrence In oAssDoc.ComponentDefinition.Occurrences On Error GoTo Fehler If oOccurrence.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOccurrence.DefinitionDocumentType = kPartDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call bauteil(oPath, oRenderstyle) End If Fehler: Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Sub Private Function baugruppe(ByVal oPath As String, ByVal oRenderstyle As Renderstyle) Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.Documents.Open(oPath, False) Dim oOcc As ComponentOccurrence For Each oOccurrence In oAssDoc.ComponentDefinition.Occurrences If oOccurrence.DefinitionDocumentType = kAssemblyDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName Call baugruppe(oPath, oRenderstyle) ElseIf oOccurrence.DefinitionDocumentType = kPartDocumentObject Then oPath = oOccurrence.ReferencedDocumentDescriptor.FullDocumentName If bauteil(oPath) = "Yes" Then oOccurrence.SetRenderStyle kOverrideRenderStyle, oRenderstyle End If Next oAssDoc.Update2 oAssDoc.Save2 oAssDoc.Close End Function Private Function bauteil(ByVal oPath As String) As String Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Open(oPath) Dim StrPartNumber As String If oPartDoc.PropertySets.Item("Design Tracking Properties").Item("Part Number").Expression = "11111" Then oPartDoc.Close bauteil = "Yes" Else oPartDoc.Close bauteil = "No" End If End Function
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |