Autor
|
Thema: mehrfacher Makroaufruf = Fehler, Document scheinbar noch im Speicher (1586 mal gelesen)
|
CoolEagle Mitglied NC-Programmierer
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 24. Mrz. 2014 14:26 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe das Problem, dass ein generiertes CATPart (GenerateCATPartfromProduct) scheinbar selbst nach dem Schliessen noch im Speicher verbleibt. Beim 2. Aufruf des Makros bleibt es in der Zeile mit der PartNumber-Änderung hängen (ScriptingERR_1002), weil ein CATPart dieser Benennung bereits im Speicher existiert. Breche ich dann das Makro ab und schliesse das CATPart manuell, kommt auch der Hinweis, dass das neue CATPart im Speicher verbleibt: "Modifications on ... are still active because the ... is in use in other windows or it has not been unloaded from session because of Undo/Redo stack." Hat da jemand eine Idee?
Code:
Sub CATMain() 'Produkt öffnen V5ProductName = "c:\temp\v4tov5migration.CATProduct" Set V5Product = CATIA.Documents.Open(V5ProductName) 'GenerateCATPartfromProduct ablaufen lassen Set Prod2Part = V5Product.Product.GetItem("DECProductToPart") Prod2Part.Run Set AllCATPart = Prod2Part.GetResult 'Produkt schliessen und Objekt löschen V5Product.Close Set V5Product = Nothing 'GenerateCATPartfromProduct zurücksetzen Set Prod2Part = Nothing 'CATPart benennen AllCATPart.Product.PartNumber = "abba" 'AllCATPart schliessen und Objekt löschen AllCATPart.Close Set AllCATPart = Nothing End Sub
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: 24. Mrz. 2014 15:11 <-- editieren / zitieren --> Unities abgeben: Nur für CoolEagle
Hallo, wir haben bei uns so ein "Speicher-Reset"-Makro im Einsatz. Du könntest folgenden Code in Deinen einbauen: Code:
Sub CATMain()Dim DocumentArray() As Document Dim Counter As Variant Dim Msg As String Dim InputValue As Long Dim ChoosedButton As Integer Dim Text As String Dim OK As Integer, n As Integer Text = "" Text = Text + "Soll ALLES gelöscht werden????" OK = MsgBox(Text, vbOKCancel, "Catia Arbeitsspeicher löschen") If OK <> 1 Then Exit Sub On Error Resume Next ReDim DocumentArray(CATIA.documents.Count) Msg = "" For n = 1 To 5 For Counter = 1 To CATIA.documents.Count Set DocumentArray(Counter) = CATIA.documents.Item(Counter) Msg = CStr(Counter) + ". " + CATIA.documents.Item(Counter).Name + Chr(13) + Chr(10) + " " + Left(CATIA.documents.Item(Counter).Path, 40) + Chr(13) + Chr(10) + Chr(13) + Chr(10) 'MsgBox (Msg) DocumentArray(Counter).Close Next Next End Sub
Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CoolEagle Mitglied NC-Programmierer
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 24. Mrz. 2014 16:06 <-- editieren / zitieren --> Unities abgeben:
Hallo Peter, dankeschön erstmal, aber das war es noch nicht. Aber durch Deine Hilfe kann ich jetzt folgendes sagen: Direkt nach dem 1. Durchlauf meines Makros, bleiben 2 Documents im Speicher. Das 1. Document kann ich als Item anspechen (CATPart3-CATPart) und mit .Close schliessen. Das 2. Document bleibt bestehen. Spreche ich es mit Item an, bekomme ich einen Fehler (The method Item failed). Baue ich die Schleife in eine For-Each-Schleife um, bleibt eben dieses 2. Document trotzdem immer bestehen. Gibt es noch eine weitere Möglichkeit den Speicher zu leeren? Gruß, Jan 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. Mrz. 2014 16:28 <-- editieren / zitieren --> Unities abgeben: Nur für CoolEagle
|
CoolEagle Mitglied NC-Programmierer
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 25. Mrz. 2014 08:47 <-- editieren / zitieren --> Unities abgeben:
|
CoolEagle Mitglied NC-Programmierer
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 25. Mrz. 2014 11:05 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, genau das möchte ich umgehen Für mich sieht es so aus, als würde das "DECProductToPart" ein undefiniertes CATPart im Speicher festhalten. Hat noch jemand eine Idee, wie man dieses aus dem Speicher schmeissen / den Speicher leeren kann? Gruß, Jan 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: 25. Mrz. 2014 11:28 <-- editieren / zitieren --> Unities abgeben: Nur für CoolEagle
Servus Das Makro läuft erst beim umbenennen in einen Fehler? Könntest du nicht auf die Änderung der PartNumber verzichten bzw eine eindeutigen String verwenden (Zähler, Datum mit Urzeit, ....) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CoolEagle Mitglied NC-Programmierer
Beiträge: 45 Registriert: 14.11.2003
|
erstellt am: 25. Mrz. 2014 11:34 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, der Fehler taucht erst beim Umbenennen auf, weil das frische CATPart dann einen Namen erhält, der in der Session schon vorhanden ist, ja. Ein Timestamp in die Bennenung mit einzubringen ist allerdings eine Variante, das werde ich als Notlösung in Betracht ziehen. Allerdings wäre es ja eleganter den Speicher zu bereinigen ;-) Gruß, Jan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |