Autor
|
Thema: VBA: Session... SaveAs... Sauerei... (2139 mal gelesen)
|
Schabloneur Mitglied Konstrukteur, Programmierer
Beiträge: 19 Registriert: 09.04.2014 Dell Precision T3610 Win7 Pro 64bit CatiaV5 R19 SP9 H106
|
erstellt am: 05. Sep. 2014 14:16 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich möchte gerne per Makro ein (All-)Catpart umbenennen und mit SaveAs an zwei verschiedenen Orten speichern. Soweit erstmal nix wildes. Aber: Wiederhole ich diese Prozedur innerhalb einer (Catia)Session und möchte nochmals den gleichen Namen für ein Catpart vergeben, streikt Catia, weil der Name in der Session schon vergeben ist. Hmmm... ok, ist ja bekannt. Da Catia sich nicht gerne in die Karten schauen und nicht mehr geöffnete Dokumente aus der Session löschen lässt, brauche ich eure Hilfe! ==> Kurioserweise kann ich den Ablauf des Umbenennens und Speicherns unendlich oft wiederholen, solange ich diesen per Hand machen! Was macht Catia da anders? 3 Sachen habe ich schon erfolglos versucht: 1. in einem Temp-Verzeichnis 100e Male (oft hatte ich gelesen, dass fünf Mal reichen würde. haha...) das Catpart mit Zeitstempel umbenannt und dort gespeichert => hat nix gebracht - "method SaveAs failed" 2. mit Catia.Documents.Item(mein Catpart).Close versucht, das Catpart/den Name aus der Session zu bekommen => Catia schließt nix (*) 3. dem Catpart im Namen (Partnumber) einen Zeitstempel angehängt und dann unter dem zu überschreibenden Dateinamen gespeichert => hat nix gebracht - "method SaveAs failed" Mein Catpart soll als Partnumber die Konvention: Bezeichnung_Datum haben. Der Dateiname entsprechend Bezeichnung_Datum.Catpart Ich bin jetzt mittlerweile so weit, dass ich (wie bei 3. beschrieben) der Partnumber einen Zeitstempel anhänge: Bezeichnung_Datum_Zeitstempel (Ansonsten kommt zu o.g. "method SaveAs failed" noch ein "method Partnumber failed" o_0 ) Der Dateiname muss aber zwingend die Konvention Bezeichnung_Datum.Catpart einhalten! Wem die Problemstellung bekannt vor kommt: Ich habe das schon mal in meinem Thema Catvba: Allcatpart-Erstellung mit DECProductToPart beschrieben. Jedoch habe ich diese neue Problemstellung hier her ausgelagert. Der Übersichtlichkeit halber... Für Ideen und Vorschläge oder auch einfach nur seelischen Beistand bin euch dankbar.
Verzweifelte Grüße, Tilo Edit: Viele haben angeblich die Session mit dem Befehl "Clear History" (bei "Commands"/"All Commands" und den Befehl in eine Toolbar ziehen) leeren können. Funktioniert bei mir nicht. Oben genannte Methodenfehler treten danach immernoch auf. Es wird ja auch nur die Undo-History gelöscht. In Catia.Documents bleibt alles beim alten...
(*) Bei der Allcatparterstellung per Makro erstellt Catia immer 2 Parts (ersichtlich in Catia.Documents): ein "CATPARTxyz.Catpart" (xyz sind fortlaufende Zahlen) und mein Allcatpart "Bezeichnung_Allcatpart.Catpart". Nur das "CATPARTxyz.Catpart" kann ich per Catia.Documents.Item(dieses Catpart).Close schließen (und aus dieser entfernen). Mein Allcatpart kann ich zwar schließen, jedoch bleibt es in der Liste bestehen. *argh*
------------------ Dem Schabloneur ist nichts zu schwör... [Diese Nachricht wurde von Schabloneur am 05. Sep. 2014 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: 05. Sep. 2014 15:25 <-- editieren / zitieren --> Unities abgeben: Nur für Schabloneur
Hallo, würde es dir was bringen wenn du dir als zwischen Speicherung einen neuen Ordner anlegst und von dort aus das das erstellte CATPart an die richtige Stelle holst? ------------------ Sei Schlau bleib Dumm !!?!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schabloneur Mitglied Konstrukteur, Programmierer
Beiträge: 19 Registriert: 09.04.2014 Dell Precision T3610 Win7 Pro 64bit CatiaV5 R19 SP9 H106
|
erstellt am: 08. Sep. 2014 10:31 <-- editieren / zitieren --> Unities abgeben:
Moin, im Prinzip habe ich das schon probiert, indem ich die unzähligen Zwischenspeicherungen im Temp-Verzeichnis durchgeführt habe. Catia wollte mir aber auch danach nicht mein Part so benennen und speichern, wie ich das gerne haben möchte! (weil der Name eben in der Session schon vorhanden ist) *hmpf* Meine Idee ist jetzt, das Part mit einem Zeitstempel zwischenzuspeichern, eine neue Catia-Session zu starten, von dort aus das Part umzubenennen (Zeitstempel weg) und an die richtigen Stellen zu speichern. Danach die Session wieder schließen... Es gibt ja noch ein kleines Lichtlein am Ende des Tunnels: Catia kann durchaus innerhalb einer Session einen Namen nochmal verwenden. Man kann ein Part/Produkt aus der Session entladen (unload). Danach kann es wieder in die Session geladen werden (load). Wurde das Part/Produkt zwischenzeitlich geändert (bspw. in einer anderen Session), so sind diese Änderungen wirksam, da Catia die Daten komplett neu läd (sonst sagt Catia einem, dass Änderungen nicht wirksam sind, weil der Name in der Session schon vorhanden ist und die vorhandenen Daten innerhalb der Session verwendet werden.) Nun, ich befürchte das Licht ist ein entgegenkommender Zug. Habe es nicht geschafft, mein per Makro erstelltes Allcatpart aus der Session zu entladen... Geladene Grüße, Tilo
------------------ Dem Schabloneur ist nichts zu schwör... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schabloneur Mitglied Konstrukteur, Programmierer
Beiträge: 19 Registriert: 09.04.2014 Dell Precision T3610 Win7 Pro 64bit CatiaV5 R19 SP9 H106
|
erstellt am: 08. Sep. 2014 13:03 <-- editieren / zitieren --> Unities abgeben:
Nebenbei: Wie lautet der Syntax um eine neue Catia-Session zu starten? Code:
Sub Neu_Catia() Dim oCATIA As Object Set oCATIA = GetObject(, "Catia.Application") oCATIA.Documents.Open ("s_Pfad" + "TEMP.CATPart") End Sub
Läuft fehlerfrei durch, allerdings wird das Part in der schon laufenden Session geöffnet. Von einer neuen Catia-Session ist weit und breit keine Spur. Mit CreateObject("Catia.Application") tut sich auch nix. Obiger Code scheint aber bei Aufruf durch ein externes Programm (bspw. Excel) keine Probleme zu machen (ungetestet, nur mehrfache Foreneinträge ohne Beschwerden deuten darauf hin...) Grüße, Tilo
------------------ Dem Schabloneur ist nichts zu schwör... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Trilemma Mitglied staatl. gepr. Techniker
Beiträge: 254 Registriert: 20.08.2010 Catia V5 R19 SP8 Windows7 64bit 12GB 2,93GHz Dell Precision T3500
|
erstellt am: 08. Sep. 2014 14:27 <-- editieren / zitieren --> Unities abgeben: Nur für Schabloneur
Hallo, eine neue Session kannst Du unter CATScript und VBA mit Code:
Sub CATMain()CATIA.SystemService.ExecuteProcessus ("cnext.exe") End Sub
starten. Unter VB.net mit:
Code:
System.Diagnostics.Process.Start("cnext.exe")
Gruß Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Systemmanager / Systemingenieur (m/w/d) | - Technische Führung interdisziplinärer Projektteams zur Entwicklung neuer Waffensysteme
- Definition von HW- und SW- Anforderungen sowie operativer Kundenanforderungen in modularen Systemarchitekturen
- Einsatzorientierte Planung, Koordination, Überwachung und Steuerung der Entwicklung, der Integration und zur Inbetriebnahme neuer Waffensysteme
- Unterstützung und Begleitung von Anfragen bzw....
| Anzeige ansehen | Teamleitung, Gruppenleitung |
|
Schabloneur Mitglied Konstrukteur, Programmierer
Beiträge: 19 Registriert: 09.04.2014 Dell Precision T3610 Win7 Pro 64bit CatiaV5 R19 SP9 H106
|
erstellt am: 08. Sep. 2014 17:07 <-- editieren / zitieren --> Unities abgeben:
Hallo Peter, danke dafür. Kann ich dem ExecuteProcessus noch mitgeben, dass er mir ein Part öffnen und auf dieses ein Makro ausführen soll? Es wird ein neues Catia geöffnet und der ExecuteProcessus wartet solange, bis ich dieses Catia wieder geschlossen habe. Theoretisch könnte das mit
Code:
CATIA.SystemService.ExecuteScript(CATBSTR iLibraryName, CatScriptLibraryType iType, CATBSTR iProgramName, CATBSTR iFunctionName, CATSafeArrayVariant iParameters)
funktionieren. Jedoch vermute ich, dass das nur innerhalb der laufenden Session läuft. Ich vermute es deswegen, weil ich es nicht zum Laufen bekomme. Bekomme den Debugfehler Zitat:
Funktion oder Schnittstelle kann nur eingeschränkt verwendet werden [...]
Bisher kannte ich es nur davon, das man bspw. Selections mit einem Latebinding versehen musste ("Dim Sel" anstatt "Dim Sel As Selection"). Habe hier aber nichts vorher definiert und bekomme es nicht compiliert (siehe Code). Code:
Sub Neu_Catia()CATIA.SystemService.ExecuteScript "TEMP.CATPart", catScriptLibraryTypeDocument, "Mein_Projekt.catvba", "Modul1", params End Sub
Danke für die Mühe. Grüße, Tilo
------------------ Dem Schabloneur ist nichts zu schwör... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|