| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Teile aus Dateinamen in iproperties eintragen (4627 mal gelesen)
|
korrosiv Mitglied Konstrukteur
Beiträge: 279 Registriert: 28.04.2005
|
erstellt am: 27. Sep. 2011 12:50 <-- editieren / zitieren --> Unities abgeben:
Hallo WBF ! ich bräuchte eure Hilfe !!! gibt es die Möglichkeit bei einem Inventor-Dateinamen mit einem Makro die ersten 6 Zeichen auszulesen um diese dann in den I-Properties unter "Benuzerdefiniert" einzutragen. Beispiel : Dateiname = 543215_Grundplatte.ipt ausgelesen werden soll = 543215 eingetragen werden sollen diese in den I-Properties unter "Benutzerdefiniert" als Name= PDB_Ident und Wert:543215 es hat den Hintergrund , wir führen ein PDM System ein und haben tausende Bauleile/Baugruppen die diese Einträge benötigen und diese Eintragerei ist ein heftiges Vorhaben wenn´s händisch geschehen soll ich hoffe ich hab meinen Hilferuf verständlich formuliert und hoffe auf euere Hilfe Danke im Vorraus korrosiv
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noctis79 Mitglied Konstrukteur/ CAD-Administrator
Beiträge: 164 Registriert: 07.10.2009 Inventor Pro 2017 Cideon Workspace
|
erstellt am: 27. Sep. 2011 21:40 <-- editieren / zitieren --> Unities abgeben: Nur für korrosiv
Gibt´s ^^ Eigentlich ganz einfach... Willst Du dann die ganzen Dateien öffnen und von Hand das Makro ausführen? Erledigt das dann ein Jobserver bei euch? Soll das ganze mit Inventor passieren oder über den Apprentice- Server (ohne Inventor)??? Fragen über fragen... Hier mal ein Lösungsansatz für Inventor: Code: Public Sub IdentProperties() Dim oapp As Inventor.Application Dim oDoc As Inventor.Document Set oapp = ThisApplication If oapp.ActiveDocument Is Nothing Then MsgBox "Kein Dokument geöffnet" Exit Sub End If Set oDoc = ThisApplication.ActiveDocument Dim cuPropSet As PropertySet Set cuPropSet = oDoc.PropertySets.item("Inventor User Defined Properties") Dim PropName As String Dim PropValue As String Dim NewProp As Property PropName = "PDB_Ident" PropValue = Left(oDoc.DisplayName, 6) Dim i As Property For Each i In cuPropSet If i.DisplayName = PropName Then MsgBox "Property existiert bereits!" Exit Sub End If Next Set NewProp = cuPropSet.Add(PropValue, PropName) End Sub
Ich würde jetzt das ganze vom Jobserver ausführen lassen oder eine exe Datei erstellen. Exe starten, Ordner auswählen, Kaffee holen und schauen was IV macht... [Diese Nachricht wurde von noctis79 am 27. Sep. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 27. Sep. 2011 21:58 <-- editieren / zitieren --> Unities abgeben: Nur für korrosiv
|
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 AutoCAD 200x, Civil, LDD, MDT, ARD, ACA(ADT) Inventor AIP 4-11,200x WinXP, W2K
|
erstellt am: 27. Sep. 2011 22:04 <-- editieren / zitieren --> Unities abgeben: Nur für korrosiv
|
korrosiv Mitglied Konstrukteur
Beiträge: 279 Registriert: 28.04.2005
|
erstellt am: 27. Sep. 2011 22:51 <-- editieren / zitieren --> Unities abgeben:
Hallo noctis79 danke für den Code ! ich werde ihn gleich morgen früh in der Firma testen zu deinen Fragen es wäre einfach genial wenn ich das Tool über ganze Verzeichnise laufen lassen könnte ohne "Einzelbehandlung" wenn es als *.exe gehen würde dann meine Frage zurück " wie gehe ich dabei vor??? und oder mit einem Jobserver ?? ich bin in dem Bereich eher ein Schwarzlicht !! aber ich sehe und lese dass es für jeden Bereich Profis mit der top Hilfe gibt !! "hilfeee" und danke für die bisherige Unterstützung mfG korrosiv Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noctis79 Mitglied Konstrukteur/ CAD-Administrator
Beiträge: 164 Registriert: 07.10.2009 Inventor Pro 2017 Cideon Workspace
|
erstellt am: 27. Sep. 2011 23:19 <-- editieren / zitieren --> Unities abgeben: Nur für korrosiv
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 28. Sep. 2011 12:32 <-- editieren / zitieren --> Unities abgeben: Nur für korrosiv
|
MWalter Mitglied Konstrukteur
Beiträge: 5 Registriert: 12.10.2011
|
erstellt am: 12. Okt. 2011 10:36 <-- editieren / zitieren --> Unities abgeben: Nur für korrosiv
Hallo zusammen, auch ich bräuchte mal eure Hilfe. Das hier sind meine ersten VBA Schritte ... also seid Nachsichtig Für einen Kunden erstellen wir aus einem großen Datensatz immer wieder neue Projekte. Hierzu wird der komplette Datensatz kopiert und das neue "Projektkürzel" in jeder iam, ipt und idw geändert. "ABC" ist das Projekt (immer anders) ..... "123_456_789" ist das Objekt (bauteilcode, Plannummern....immer gleich). Ich habe jetzt in jeder iam, ipt und idw die benutzerdefinierten IProperties "Auftrag" und "Objekt" eingebaut und lasse als Bauteilnummer beide zusammenfühen (=<Auftrag>_<Objekt> )...ABC_123_456_789 Im Moment muss ich wieder mal die idw's für ein neues Projekt erstellen ... ... Zeichnung öffnen, Iproprties öffnen, "Auftrag" ändern, als A0 pdf drucken, speichern und schließen.... Das Ganze passiert in etwa alle 6 Wochen... umfasst jedes mal in etwa 200 Zeichnungen ... und das nur, um aus "ABC_123_456_789" ein "XYZ_123_456_789" zu machen. Lange Rede....Ich habe mir diesen Code mal als Basis für mein benötigtes Makro hergenommen und etwas abgeändert ( das mit dem in PDF-Drucken gibt's hier massenhaft im Forum.... das kommt dann später hinzu) Code: Public Sub IdentProperties() Dim oapp As Inventor.Application Dim oDoc As Inventor.Document Set oapp = ThisApplication If oapp.ActiveDocument Is Nothing Then MsgBox "Kein Dokument geöffnet" Exit Sub End If Set oDoc = ThisApplication.ActiveDocument Dim cuPropSet As PropertySet Set cuPropSet = oDoc.PropertySets.Item("Inventor User Defined Properties") Dim PropName As String Dim PropValue As String Dim NewProp As Property PropName = "Auftrag" PropValue = "XYZ" Dim i As Property For Each i In cuPropSet If i.DisplayName = PropName Then MsgBox "Auftrag bereits aktualisiert!" Exit Sub End If Next Set NewProp = cuPropSet.Add(PropValue, PropName) End Sub
Ich kann hiermit Prima NICHT VORHANDENE Properties hinzufügen, aber ich kann nicht den Wert einer BESTEHENDEN IProperty abändern ..... Die Abfrage bei "DisplayName" müsste ja auch abfragen, ob der Wert bereits aktuell ist nicht, ob die Propwerty schon besteht, oder? Hab jetzt so viel hier rum gespielt und komm leider überhaupt nicht weiter. Ich hoffe ihr könnt mir da weiterhelfen. Vielen Dank schon mal - Gruß Markus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noctis79 Mitglied Konstrukteur/ CAD-Administrator
Beiträge: 164 Registriert: 07.10.2009 Inventor Pro 2017 Cideon Workspace
|
erstellt am: 12. Okt. 2011 11:24 <-- editieren / zitieren --> Unities abgeben: Nur für korrosiv
Probier mal das anstelle Deiner For each Schleife: Code: For Each i In cuPropSet If i.DisplayName = PropName Then i.Value = PropValue Exit Sub End If Next
und mach das Ganze dann noch hübsch mit ner Eingabemaske für die Auftragsnummer![Diese Nachricht wurde von noctis79 am 12. Okt. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWalter Mitglied Konstrukteur
Beiträge: 5 Registriert: 12.10.2011
|
erstellt am: 12. Okt. 2011 12:15 <-- editieren / zitieren --> Unities abgeben: Nur für korrosiv
Hallo noctis79, vielen Dank für die schnelle Antwort.... Das funktioniert! Damit ich das kapier: Anstatt eine Nachricht zu erzeugen, dass der Parameter mit Namen "Auftrag" schon vorhanden ist, nutzen wir diese Abfrage um direkt den Wert von "Auftrag" in den vorgegebenen Value zu ändern. Die letzte Zeile ist somit überfüssig (Set NewProp = cuPropSet.Add(PropValue, PropName)) und kann gelöscht werden...... JA! (ERFOLGSERLEBNIS.....) Ha...das ersetzen funktioniert nun. Im Zeichnungskopf bleibt allerdings noch das alte Kürzel stehen, bis ich einmal die IPropertys öffne und wieder schließe, bzw. bis ich die Zeichnung einmal speichere. Ein anschließendes Zwischenspeichern bekomm ich sicherlich hin, aber gibt es 'ne Lösung ohne Speichern dien Zeichnungskopf zu "aktualisieren" Zur Erklärung: Das Projekt sind die gesamten Stahlbaupläne für Thermische Solarkraftwerke ... in den höheren Ebenen Lädt und Speichert eine Zeichnung gut und gerne mal 3-5 Minuten und das liegt nicht unbedingt an veralteter Hardware (Win7 64bit, Intel Core I7 880, 16 GB Ram) Gut....speichern müsste ich ja ohnehin... ich könnte ja speichern, pdf drucken und automatisch die idw. schließen.... beim schließen würde dann nicht nochmal gespeichert werden, da seit dem letzten speichern nix verändert wurde, oder? Es sei denn es gibt 'ne bessere Lösung um den Zeichnungskopf zu aktualisieren....
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noctis79 Mitglied Konstrukteur/ CAD-Administrator
Beiträge: 164 Registriert: 07.10.2009 Inventor Pro 2017 Cideon Workspace
|
erstellt am: 12. Okt. 2011 12:31 <-- editieren / zitieren --> Unities abgeben: Nur für korrosiv
Schau Dir mal folgendes an. Neu ist hier die Variable oExist, die Abfrage beim Set.... und das odoc.update... odoc.update müsste Deine Zeichnung soweit aktualisieren, dass der Richtige Wert in der Zeichnung steht... Code: Sub test() Dim oapp As Inventor.Application Dim oDoc As Inventor.Document Set oapp = ThisApplication If oapp.ActiveDocument Is Nothing Then MsgBox "Kein Dokument geöffnet" Exit Sub End If Set oDoc = ThisApplication.ActiveDocument Dim cuPropSet As PropertySet Set cuPropSet = oDoc.PropertySets.item("Inventor User Defined Properties") Dim PropName As String Dim PropValue As String Dim NewProp As Property Dim oExist As Boolean oExist = False PropName = "Auftrag" PropValue = "XYZ" Dim i As Property For Each i In cuPropSet If i.DisplayName = PropName Then i.Value = PropValue oExist = True End If Next If oExist = False Then Set NewProp = cuPropSet.Add(PropValue, PropName) End If oDoc.updateEnd Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWalter Mitglied Konstrukteur
Beiträge: 5 Registriert: 12.10.2011
|
erstellt am: 12. Okt. 2011 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für korrosiv
|