Autor
|
Thema: Problem mit Makro zur Umbenennung (3365 mal gelesen)
|
PukyRider Mitglied Student, Maschinenbau
Beiträge: 31 Registriert: 19.04.2013
|
erstellt am: 24. Apr. 2013 11:24 <-- editieren / zitieren --> Unities abgeben:
Guten Tag CAD-Gemeinde, das ist mein erster Post hier im Forum, deswegen stelle ich mich kurz vor. Ich bin Maschinenbaustudent und 22 Jahre alt. Den Umgang mit Catia v5 habe ich im Studium angerissen und als Werkstudent vertieft. Zu meinem Problem: Ich habe hier im Forum, was mich schon oft weitergebracht hat (vielen Dank dafür), ein großartiges Makro gefunden. Leider finde ich den Post nicht mehr und kann desswegen den Urheber nicht nennen. Das Makro nimmt den Dateinamen und ersetzt die Partnumber und den Instancename, mit der entsprechenden Aufzählung bei mehrfachem vorkommen. Zitat:
SUB CATMain() DIM acDoc DIM acProd DIM tmpString DIM FileName DIM FileSeparator FileSeparator = CATIA.FileSystem. FileSeparatorSET acDoc = CATIA.ActiveDocument SET acProd = acDoc.Product acProd.ApplyWorkMode DESIGN_MODE FOR EACH oDoc IN CATIA.Documents tmp = SPLIT(oDoc.FullName, FileSeparator) tmpString = tmp(UBOUND(tmp)) tmp = SPLIT(tmpString,".") FileName = tmp(0) oDoc.Product.PartNumber = FileName NEXT InstanceName acProd WalkThroughTree acProd END SUB '------------------------------------- '------------------------------------- SUB WalkThroughTree(oParent) DIM iProduct DIM oChild FOR iProduct = 1 TO oParent.Products.Count SET oChild = oParent.Products.Item(iProduct) InstanceName oChild.ReferenceProduct WalkThroughTree oChild.ReferenceProduct NEXT END SUB '------------------------------------- '------------------------------------- SUB InstanceName (oParent) Set oDict = CreateObject("Scripting.Dictionary") ON ERROR RESUME NEXT DIM iProduct DIM oItemToRename DIM ItemPartNumber FOR EACH oItemToRename IN oParent.Products ItemPartNumber = oItemToRename.PartNumber If oDict.Exists(ItemPartNumber) Then oDict.Item(ItemPartNumber) =oDict.Item(ItemPartNumber) +1 Else oDict.Add ItemPartNumber, 1 End If oItemToRename.Name = ItemPartNumber & "--tmpStringToStopERRORS" & oDict.Item(ItemPartNumber) NEXT oDict.RemoveAll FOR EACH oItemToRename IN oParent.Products ItemPartNumber = oItemToRename.PartNumber If oDict.Exists(ItemPartNumber) Then oDict.Item(ItemPartNumber) =oDict.Item(ItemPartNumber) +1 Else oDict.Add ItemPartNumber, 1 End If oItemToRename.Name = ItemPartNumber & "." & oDict.Item(ItemPartNumber) NEXT oDict.RemoveAll END SUB
Es klappt eigentlich Fehlerfrei, außer in einem Part wurde etwas mit dem Programm Type3 gemacht. Dann kommt die Fehlermeldung: Das Objekt unterstützt diese Eigenschaft oder Methode nicht.:’o.Doc.Product' Line: 22 Column: 2 (Im Makro fett) Ich hoffe ihr könnt mir weiter helfen, da ich Makros leider nicht gut kann. Mit freundlichen Grüßen PukyRider
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 24. Apr. 2013 12:35 <-- editieren / zitieren --> Unities abgeben: Nur für PukyRider
Servus Ich welchem Format liegt das Teil (aus Type3) vor? (Dateiendung) ggf kann könnte man einfach über Abfrage eine den Typ des Dokuments bestimmen: (ungetestet) Code: FOR EACH oDoc IN CATIA.Documents if TypeName(oDoc) = ("PartDocument" or "ProductDocument") then tmp = SPLIT(oDoc.FullName, FileSeparator) tmpString = tmp(UBOUND(tmp)) tmp = SPLIT(tmpString,".") FileName = tmp(0) oDoc.Product.PartNumber = FileName end if NEXT
gruß Bernd------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 24. Apr. 2013 12:38 <-- editieren / zitieren --> Unities abgeben: Nur für PukyRider
Hallo und Herzlich willkommen im Forum, ich gehe nicht davon aus, dass das Part selbst das Problem ist, sondern die geladenen Dokumente. Das Makro ist eigentlich "nicht" sauber bzw. zu Ende programmiert. Wenn du auf CATIA.Documents gehst, musst du noch eine Abfrage der Dokumententypen reinbringen. Es gibt nämlich durchaus Dateien die geladen sind, die garkein CATIA-Dokument darstellen, sondern eine Umgebung, Konfiguration oder ähnliches. Genau das passiert AFAIK nämlich auch bei Type3. Diese haben aber garnicht die Eigenschaft .Partnumber und können daher nicht derart bearbeitet werden. Hast du mal im debugger geschaut, was in "Filename" drin steht? ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PukyRider Mitglied Student, Maschinenbau
Beiträge: 31 Registriert: 19.04.2013
|
erstellt am: 24. Apr. 2013 14:31 <-- editieren / zitieren --> Unities abgeben:
Danke für die schnellen Antworten. @bgrittmann Zitat: Servus Ich welchem Format liegt das Teil (aus Type3) vor? (Dateiendung) ggf kann könnte man einfach über Abfrage eine den Typ des Dokuments bestimmen: (ungetestet) Code: -------------------------------------------------------------------------------- FOR EACH oDoc IN CATIA.Documents if TypeName(oDoc) = ("PartDocument" or "ProductDocument") then tmp = SPLIT(oDoc.FullName, FileSeparator) tmpString = tmp(UBOUND(tmp)) tmp = SPLIT(tmpString,".") FileName = tmp(0) oDoc.Product.PartNumber = FileName end if NEXT --------------------------------------------------------------------------------gruß Bernd
Die Ergänzung resultiert leider wieder in einer Fehlermeldung: Typ unverträglich: ’[string: “PartDocument“]“ Die Type3 Elemente sind per Geometrical Set eingefügt, also keine gespeicherten Dateien und keine Endungen. @RSchulz
Zitat: Hallo und Herzlich willkommen im Forum, ich gehe nicht davon aus, dass das Part selbst das Problem ist, sondern die geladenen Dokumente.Das Makro ist eigentlich "nicht" sauber bzw. zu Ende programmiert. Wenn du auf CATIA.Documents gehst, musst du noch eine Abfrage der Dokumententypen reinbringen. Es gibt nämlich durchaus Dateien die geladen sind, die garkein CATIA-Dokument darstellen, sondern eine Umgebung, Konfiguration oder ähnliches. Genau das passiert AFAIK nämlich auch bei Type3. Diese haben aber garnicht die Eigenschaft .Partnumber und können daher nicht derart bearbeitet werden. Hast du mal im debugger geschaut, was in "Filename" drin steht? ------------------ MFG Rick Schulz
Das mit dem geladenen Dokument habe ich mir auch schon gedacht, allerdings wüsste ich nicht wie ich so eine Abfrage schreiben sollte. Und was meinst du mit dem Filename im Debugger? lg. Tim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 24. Apr. 2013 14:53 <-- editieren / zitieren --> Unities abgeben: Nur für PukyRider
Zitat: Original erstellt von PukyRider: Das mit dem geladenen Dokument habe ich mir auch schon gedacht, allerdings wüsste ich nicht wie ich so eine Abfrage schreiben sollte. Und was meinst du mit dem Filename im Debugger?
FileName ist die Variable, in dem der Name des Dokumentes steht bzw. reingeschrieben wird und im Debugger kann man Haltepunkte setzen und direkt auslesen, was in dieser Variable steht. Nur so kannst du sehen, ob es wirklich das Part ist, was Probleme macht oder evtl. eine ganz andere Datei, die er versucht zu verarbeiten. In den Debugger kommst du über Tools > Makros > Visual Basic Editor... bzw. ist die Programmieroberfläche automatisch der Debugger. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PukyRider Mitglied Student, Maschinenbau
Beiträge: 31 Registriert: 19.04.2013
|
erstellt am: 24. Apr. 2013 15:13 <-- editieren / zitieren --> Unities abgeben:
Leider ist das in der Umgebung nicht richtig Installiert, bekomme immer wieder die gleiche Fehlermeldung beim Versuch eine neue Libary zu erstellen. PS: Ich weiß das es am Type3 leigt, da es Funktioniert, wenn ich die Elemente lösche. Muss nochmal Editieren: Es klappt, vielen Dank an euch beide. Im Endefekt, habe ich bgrittmann's Zeilen ersetzt und "Part.Document" weg gelassen, so sollte ja die Selektierung trotzdem funtkionieren. Ich weiß nicht ob jetzt wo anders Fehlermeldungen auftauchen, aber momentan läuft es! MFG. Tim
[Diese Nachricht wurde von PukyRider am 24. Apr. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 24. Apr. 2013 16:05 <-- editieren / zitieren --> Unities abgeben: Nur für PukyRider
Servus Dann ändere mal die Zeile in: Code: If TypeName(oDoc) = "PartDocument" Or TypeName(oDoc) = "ProductDocument" Then
gruß Bernd------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PukyRider Mitglied Student, Maschinenbau
Beiträge: 31 Registriert: 19.04.2013
|
erstellt am: 24. Apr. 2013 16:14 <-- editieren / zitieren --> Unities abgeben:
|
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 25. Apr. 2013 16:11 <-- editieren / zitieren --> Unities abgeben: Nur für PukyRider
Moin moin, danke erstmals für: Zitat: ein großartiges Makro gefunden
Das Makro habe ich geschrieben/gepostet. Das war jedoch vor über einem Jahr und da war ich noch nicht so gut. Hoffentlich würde mir die schwachstelle heute auffallen Ich habe es im orginal post gerade korrigiet. danke für den hinweis. gruß, Dean Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aurotaja Mitglied Modellbauer / Konstrukteur
Beiträge: 8 Registriert: 29.07.2005 Catia V5R19 SP9 HF89
|
erstellt am: 24. Mai. 2013 14:09 <-- editieren / zitieren --> Unities abgeben: Nur für PukyRider
Hallo PukyRider, kann es sein das ihr für Type3 keine Licence habt? Soviel ich weiß läuft bei integrierten Type3 Elementen ohne Licence nicht mal ein normales Update in V5 durch ohne Fehlermeldung. gruß Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
K.Siebert Mitglied Tech Zeichner
Beiträge: 415 Registriert: 19.05.2007 Win XP Catia V5 R19 Catia V5 R24
|
erstellt am: 24. Mai. 2013 23:53 <-- editieren / zitieren --> Unities abgeben: Nur für PukyRider
Hallo, nur ein kleiner Hinweis ich weiß jetzt nicht ob man den Split auf „.CAT“ erweitern kann. Weil in einer Struktur wo ein Punkt vorkommt funktioniert dieses nicht, z.B. in einer BMW Struktur so könnte es auch aussehen: Code:
if TypeName(oDoc) = ("PartDocument") then FileName = Left(oDoc.Name, Len("") -7 ) enf ifif TypeName(oDoc) = ("ProductDocument") then FileName = Left(oDoc.Name, Len("") -10 ) enf if
Edit: Zwei Beiträge weiter unten der Überarbeitete Code, mit zwei Beispiel Link's (Den Code habe ich nicht testen können) ------------------ Sei Schlau bleib Dumm !!?!! [Diese Nachricht wurde von K.Siebert am 29. Mai. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PukyRider Mitglied Student, Maschinenbau
Beiträge: 31 Registriert: 19.04.2013
|
erstellt am: 29. Mai. 2013 10:13 <-- editieren / zitieren --> Unities abgeben:
Danke für euer Interesse. @ aurotaja: Die Type Lizenz haben wir, daran ist es nicht gescheitert. Und bis jetzt funktioniert auch alles. @ K.Siebert: Bis jetzt ist mir noch kein Fehler aufgetreten. Ich weiß aber auch nicht genau, was du mit dem Punkt meinst. Wenn ich Zeit habe, werde ich das Makro "umbauen". Du meinst den Punkt im Dateinamen und jetzt verstehe ich auch deine Ergänzung.
Ich werde es so bald als möglich testen. Catia sagt, "sie" kennt den Befehl Left nicht, bzw. ungültiger Prozeduraufruf oder ungültiges Argument. [Diese Nachricht wurde von PukyRider am 29. Mai. 2013 editiert.] [Diese Nachricht wurde von PukyRider am 29. Mai. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 29. Mai. 2013 16:26 <-- editieren / zitieren --> Unities abgeben: Nur für PukyRider
Hallo PukyRider, Left darf nicht negativ sein. Bei Len("") soll sicher etwas rein und nur als Beispiel dienen. :-) ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing [Diese Nachricht wurde von HoBLila am 29. Mai. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
K.Siebert Mitglied Tech Zeichner
Beiträge: 415 Registriert: 19.05.2007 Win XP Catia V5 R19 Catia V5 R24
|
erstellt am: 30. Mai. 2013 00:00 <-- editieren / zitieren --> Unities abgeben: Nur für PukyRider
Hallo, Beip. von Word Zeichnung als PDF Speichern Zahl eins erhöht um den Punkt bei ".CAT.." noch mit wegzunehmen >Len(oDoc.Name) -8 )< Code: if TypeName(oDoc) = ("PartDocument") then FileName = Left(oDoc.Name, Len(oDoc.Name) -8 ) enf ifif TypeName(oDoc) = ("ProductDocument") then FileName = Left(oDoc.Name, Len(oDoc.Name) -11 ) enf if
Name der Datei = xxx.Name Pfad zur Datei = xxx.Path Pfad & Name = xxx.FullName Part Name (in Catia) = xxx.PartNumber xxx = Platzhalter je nachdem von wo man auf diese Information zugreifen möchte. ------------------ Sei Schlau bleib Dumm !!?!! [Diese Nachricht wurde von K.Siebert am 30. Mai. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PukyRider Mitglied Student, Maschinenbau
Beiträge: 31 Registriert: 19.04.2013
|
erstellt am: 05. Jun. 2013 14:59 <-- editieren / zitieren --> Unities abgeben:
Danke für eure Antworten. Konnte leider erst Heute die Vorschläge testen. Kurz gesagt es klappt. Langfassung: Es hat mich fast den ganzen Tag gekostet, bis es richtig Funktioniert hat. Musste viel über try and error versuchen. Aber schlussendlich hat es dann doch funktioniert. Mein Problem war, Iih musste erst herausfinden wo genau die Zeilen von K.Siebert (danke nochmal) hingehören. Dann noch ein paar Extras hier und da und es war vollbracht. In diesem Sinne, Danke und einen schönen Tag noch. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PukyRider Mitglied Student, Maschinenbau
Beiträge: 31 Registriert: 19.04.2013 System: Intel Xeon E5-1620 3,5GHz 16GB DDR3 Nvidia Quadro K220 256gb SSD Kein Excel Catia R19, R22 und R24(BMW, Porsche, Ford, VW) Nx 10 Daimler
|
erstellt am: 16. Aug. 2013 15:00 <-- editieren / zitieren --> Unities abgeben:
Guten Tag ich habe noch einen kleinen Nachtrag/Bitte zu diesem Makro. Es funktioniert einfach wunderbar, allerdings ändert es alle Parts und Products, auch wenn diese schon die passenden Namen besitzen. Ist es möglich das Makro so zu verändern, dass wirklich nur die "modified" werden, wo der Name geändert werden muss? ------------------ Vielen Dank für Ihr Interesse! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 26. Aug. 2013 11:15 <-- editieren / zitieren --> Unities abgeben: Nur für PukyRider
Moin moin, das müsste doch relativ einfach sein, oder? Die Logik hast du schon in deine Frage. Einfach die Umbennungvorgang mit der Abfrage ersetzen. Da du dein Code umgeschrieben hast, weiß ich nicht wo dein Umbennung nun statt findet, aber von org Post würde es hier passieren: aus... oDoc.Product.PartNumber = FileName ...mache ... If oDoc.Product.PartNumber <> FileName then oDoc.Product.PartNumber = FileName daraus. Sprich wenn PartNumber nicht gleich DateiName dann PartNumber = DateiName. Gruß,
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PukyRider Mitglied Student, Maschinenbau
Beiträge: 31 Registriert: 19.04.2013
|
erstellt am: 26. Aug. 2013 11:41 <-- editieren / zitieren --> Unities abgeben:
|
PukyRider Mitglied Student, Maschinenbau
Beiträge: 31 Registriert: 19.04.2013 System: Intel Xeon E5-1620 3,5GHz 16GB DDR3 Nvidia Quadro K220 256gb SSD Kein Excel Catia R19, R22 und R24(BMW, Porsche, Ford, VW) Nx 10 Daimler
|
erstellt am: 06. Sep. 2013 08:37 <-- editieren / zitieren --> Unities abgeben:
|