| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Bechtle Competence Days | Online |
Autor
|
Thema: Makro: Alle geöffneten Dokumente als STEP speichern und schließen (5296 mal gelesen)
|
API-Fabi Mitglied CAD/PLM Admin
Beiträge: 56 Registriert: 23.11.2015 SOLIDWORKS 2020 SP5 Windows 10 SAP-PLM Interface (CAD-Desktop)
|
erstellt am: 02. Dez. 2015 08:03 <-- editieren / zitieren --> Unities abgeben:
Hallöchen! Hat mir jemand ein Beispiel mit einer Schleife, die alle geöffneten Dokumente als Step speichert und anschließend schließt? Ich verstehe die Funktionsweise der Schleife nicht so ganz... Gruß Fabi ------------------ Geht nicht, gibt's nicht! ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 02. Dez. 2015 08:27 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo Api-Fabi sorry aber ich kann mir das jetzt nicht verkneifen, wenn Du die Funtionsweise einer Schleife nicht verstehst dann, solltest Du mal eine Basisschulung machen und Deinen Nick ändern Wie gesagt, ist nicht böse gemeint ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 02. Dez. 2015 08:27 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo API-Fabi, Zitat: Original erstellt von API-Fabi: Hat mir jemand ein Beispiel mit einer Schleife, die alle geöffneten Dokumente ... Ich verstehe die Funktionsweise der Schleife nicht so ganz
Es gibt ein Beispiel per Traverse in der API-Hilfe names "Get Names of Open Documents Example (VBA)", alternativ bekommst du mit SldWorks::EnumDocuments2 eine Liste der ganzen geöffneten ModelDoc-Objekte (würde ich machen). Denk daran, dass nicht alle geöffneten Dokumente auch sichtbar in SolidWorks sind. Was verstehst du an welcher Funktionsweise welcher Schleife nicht? Ciao, Stefan
------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
API-Fabi Mitglied CAD/PLM Admin
Beiträge: 56 Registriert: 23.11.2015 SOLIDWORKS 2020 SP5 Windows 10 SAP-PLM Interface (CAD-Desktop)
|
erstellt am: 02. Dez. 2015 08:35 <-- editieren / zitieren --> Unities abgeben:
Sorry, hatte mich falsch ausgedrückt... Ich weiß natürlich schon, was eine Schleife macht. Ich meinte ich verstehe nicht, was mir fehlt, dass die Schleife auch funktioniert: Hier mein Code: ********************************************* Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim myModels() As ModelDoc2 Sub main() Set swApp = Application.SldWorks myModels = swApp.GetDocuments For Each myModel In myModels 'Überprüfung ob keine Datei oder Zeichnung => Fehlermeldung und Abbruch If Not myModel Is Nothing Then If myModel.GetType = SwConst.swDocumentTypes_e.swDocDRAWING Then MsgBox ("Dieses Makro kann nicht für Zeichnungen ausgeführt werden") Exit Sub End If Else MsgBox ("Sie haben keine Teile oder Baugruppen geöffnet.") Exit Sub End If Dim myTitle As String myTitle = myModel.GetTitle 'Dokument aktivieren swApp.ActivateDoc3 myTitle, True, 2, 0 'Konfiguration "Standard" auswählen Set Part = swApp.ActiveDoc boolstatus = Part.Extension.SelectByID2("Standard", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0) boolstatus = Part.ShowConfiguration2("Standard") 'Ansicht Isometrisch (zoomt automatisch auf Fenstergröße) Part.ShowNamedView2 "*Isometrisch", 7 'Als STEP speichern FilePath = Part.GetPathName NewFilePath = FilePath & ".STEP" longstatus = Part.SaveAs3(NewFilePath, 0, 0) MsgBox ("Gespeichert unter " & NewFilePath) 'Dokument schließen swApp.CloseDoc myTitle Next End Sub ********************************************* Es Speichert das Dokument zwar als Step, schließt es aber nicht und wechselt nicht zum nächsten Dokument. Zudem funktioniert mein Befehl zum Aktivieren des Dokuments nicht Was fehlt hier noch?
------------------ Geht nicht, gibt's nicht! ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 02. Dez. 2015 09:48 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo Api-Fabi du darfst den 4, Parameter bei ActivateDoc nicht mi "0" angeben sondern musst dafür eine Variable verwenden siehe dazu auch das Beispiel in der API-Hilfe Stichwort "Rebuild a Document on Activation Example (VBA)" ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
API-Fabi Mitglied CAD/PLM Admin
Beiträge: 56 Registriert: 23.11.2015 SOLIDWORKS 2020 SP5 Windows 10 SAP-PLM Interface (CAD-Desktop)
|
erstellt am: 02. Dez. 2015 14:44 <-- editieren / zitieren --> Unities abgeben:
Hi, ich habe den Befehl rausgenommen. Jetzt speichert es das aktuelle Dokument ung bleibt bei GetNext stehen. Was fehlt hier noch? Das Makro soll alle geöffneten Dokumente als Step speichern. ************************** Dim swApp As Object
Dim Part As Object Dim boolstatus As Boolean Dim myModel As SldWorks.ModelDoc2 Sub main() Set swApp = Application.SldWorks Set myModel = swApp.GetFirstDocument While Not myModel Is Nothing 'Überprüfung ob keine Datei oder Zeichnung => Fehlermeldung und Abbruch If Not myModel Is Nothing Then If myModel.GetType = SwConst.swDocumentTypes_e.swDocDRAWING Then MsgBox ("Dieses Makro kann nicht für Zeichnungen ausgeführt werden") Exit Sub End If Else MsgBox ("Sie haben keine Teile oder Baugruppen geöffnet.") Exit Sub End If Dim myTitle As String myTitle = myModel.GetTitle 'Konfiguration "Standard" auswählen Set Part = swApp.ActiveDoc boolstatus = Part.Extension.SelectByID2("Standard", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0) boolstatus = Part.ShowConfiguration2("Standard") 'Ansicht Isometrisch (zoomt automatisch auf Fenstergröße) Part.ShowNamedView2 "*Isometrisch", 7 'Als STEP speichern FilePath = Part.GetPathName NewFilePath = FilePath & ".STEP" longstatus = Part.SaveAs3(NewFilePath, 0, 0) 'MsgBox ("Gespeichert unter " & NewFilePath) Set swModel = swModel.GetNext Wend 'Dokument schließen 'swApp.CloseDoc myTitle End Sub ***************************** ------------------ Geht nicht, gibt's nicht! ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
API-Fabi Mitglied CAD/PLM Admin
Beiträge: 56 Registriert: 23.11.2015 SOLIDWORKS 2020 SP5 Windows 10 SAP-PLM Interface (CAD-Desktop)
|
erstellt am: 02. Dez. 2015 15:26 <-- editieren / zitieren --> Unities abgeben:
kleiner Fehler meinerseits: Es muss natürlich "Set swModel = myModel.GetNext" heißen. Dann führt es die Arbeitsschritte für alle Dokumente durch. Allerdings, ist das sozusagen eine "Endlos-Schleife" und läuft immer wieder von vorne durch... Wie kann ich die Dokumente nach dem Speichern schließen? Dann würde es nicht immer wieder von vorne durchlaufen... CloseDoc funktioniert iwie nicht... ------------------ Geht nicht, gibt's nicht! ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 02. Dez. 2015 15:33 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo Fabi, 1.) warum hast Du jetzt die Schleife anders gemacht? 2.) hast Du das Makro schon mal schrittweise durchlaufen (F8)? 3.) ganz einfach, Du schreibst am Ende der Schleife "Set swModel = swModel.GetNext" von wo soll "swModel" einen Wert/Inhalt haben? PS "Set swModel = myModel.GetNext" wird auch nicht funktionieren! es muss "Set myModel = myModel.GetNext" heißen ------------------ Grüße Heinz
[Diese Nachricht wurde von nahe am 02. Dez. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
API-Fabi Mitglied CAD/PLM Admin
Beiträge: 56 Registriert: 23.11.2015 SOLIDWORKS 2020 SP5 Windows 10 SAP-PLM Interface (CAD-Desktop)
|
erstellt am: 03. Dez. 2015 09:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Heinz, zu 1) Ich habe ein Beispiel-Makro von StefanBerlitz kopiert. Da war das so drin... War aber nur ein Versuch Habe das Makro angepasst. Es funktioniert nun einwandfrei. Wenn ich aber eine Baugruppe offen habe speichert es alle einzelne Parts als STEP und nicht die Baugruppe. Wie kann ich das ändern? Mein Code: *********************** Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim myModels() As ModelDoc2 Dim longstatus As Long, longwarnings As Long Sub main() Set swApp = Application.SldWorks myModels = swApp.GetDocuments For Each myModel In myModels 'Überprüfung ob keine Datei oder Zeichnung => Fehlermeldung und Abbruch If Not myModel Is Nothing Then If myModel.GetType = SwConst.swDocumentTypes_e.swDocDRAWING Then MsgBox ("Dieses Makro kann nicht für Zeichnungen ausgeführt werden") Exit Sub End If Else MsgBox ("Sie haben keine Teile oder Baugruppen geöffnet.") Exit Sub End If Dim myTitle As String myTitle = myModel.GetTitle 'Dokument aktivieren swApp.ActivateDoc2 myTitle, False, longstatus 'Konfiguration "Standard" auswählen Set Part = swApp.ActiveDoc boolstatus = Part.Extension.SelectByID2("Standard", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0) boolstatus = Part.ShowConfiguration2("Standard") 'Ansicht Isometrisch (zoomt automatisch auf Fenstergröße) Part.ShowNamedView2 "*Isometrisch", 7 'Als STEP speichern FilePath = Part.GetPathName NewFilePath = FilePath & ".STEP" longstatus = Part.SaveAs3(NewFilePath, 0, 0) MsgBox ("Gespeichert unter " & NewFilePath) 'Dokument schließen swApp.CloseDoc myTitle Next End Sub ************** Gruß Fabi ------------------ Geht nicht, gibt's nicht! ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 03. Dez. 2015 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Also bei mir läuft das Makro. Werden alle Dateien im selben Verzeichnis gespeichert? Wenn nein, ev. hast Du in dem Verzeichnis keinen Schreibzugriff? sonst fällt mir dazu nichts ein. ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
API-Fabi Mitglied CAD/PLM Admin
Beiträge: 56 Registriert: 23.11.2015 SOLIDWORKS 2020 SP5 Windows 10 SAP-PLM Interface (CAD-Desktop)
|
erstellt am: 03. Dez. 2015 11:39 <-- editieren / zitieren --> Unities abgeben:
Das Makro läuft. Alle Dateien werden im gleichen Verzeichnis gespeichert. Das Problem ist nur, dass es bei Baugruppen auch die Unterkomponenten speichert. Das ist aber nicht notwendig, weil diese ja in der STEP-DAtei enthalten sind und das geht dann auch extrem lang bei größeren Baugruppen. Es soll einfach nur die Baugruppe speichern, aber nicht die darin enthaltenen Parts... ------------------ Geht nicht, gibt's nicht! ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 03. Dez. 2015 11:54 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo Fabi, ohne dir zu nahe treten zu wollen: verstehst du überhaupt den Code, den du dir da so zusammenstöpselst? Das hat mich schon bei ein paar anderen Rückfragen überrascht, deswegen habe ich dann nichts mehr geantwortet, weil ich dir ein wenig Zeit geben wollte, dass selbst herauszufinden und dich mit dem Code und vor allem der Logik des Programmablaufs zu beschäftigen. Ich bin mir jetzt nicht sicher, was die ungünstigere Variante wäre, ob du das nicht tust oder ob es dich überfordert ... Wie dem auch sein, wenn du alle geöffneten Dokumente durchgehst (in deiner Schleife) musst du doch nur überprüfen, ob du eine Baugruppe gerade in den Fingern hast. Du prüfst schon explizit auf eine Zeichnung ab (If myModel.GetType = SwConst.swDocumentTypes_e.swDocDRAWING Then), also solltest du verstanden haben, wie du auf ein Dokument eines bestimmten Typs prüfen kannst. Und dann eben den Teil mit dem Speichern nur ausführen, wenn du eine Baugruppe hast. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 03. Dez. 2015 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
noch eine Info Deine ursprüngliche Anforderung war "Alle geöffneten Dokumente als STEP speichern und schließen" wie Du jetzt nur die Baugruppe speichern möchtest, hat Stefan ja schon beschrieben. Ev. gibt es aber auch noch den Fall, dass Teile-Dateien offen sind die Du auch speichern möchtest? Wenn das so ist, wird es wohl etwas komplizierter, weil Du dann zuerst alle Komponenten und Unterbaugruppen der geöffneten Baugruppen durchlaufen musst, um zu erfahren welche Teile in Baugruppen enthalten sind und welche unabhängig von den Baugruppen geöffnet sind. wie so oft, kommt man vom Hundersten ins Tausendste und man sollte sich vorher überlegen, welche Fälle man berücksichtigen möchte, welche auftreten können und wie das Makro darauf reagieren soll.
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
API-Fabi Mitglied CAD/PLM Admin
Beiträge: 56 Registriert: 23.11.2015 SOLIDWORKS 2020 SP5 Windows 10 SAP-PLM Interface (CAD-Desktop)
|
erstellt am: 03. Dez. 2015 12:43 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan, zugegeben, ich bin kein Api-Profi. Aber ich dachte, dass mir da jemand helfen kann oder ist das hier ein Club der Ultra-Profis? Ich verstehe sehr wohl, was mein Makro macht. Lasst mich bitte erklären, worin die Komplexität liegt: 1.Ich öffne unterschiedliche Dokumente. Z.B. 2 Baugruppen und 2 Einzelteile. 2.Ich möchte nicht dass mein Makro nur Baugruppen oder Einzelteile speichert, sondern beides. Das Problem ist, dass das Makro dann auch die Unterkomponenten der Baugruppe speichert. Das soll es aber nicht. Es soll praktisch nur die Dokumente speichern, die ich auch händisch geöffnet habe. Bitte habt ein bisschen Verständnis, dass das jetzt nicht gerade das einfachste der Welt ist... Sonst könntet ihr mir doch gleich sagen, was ich zu tun habe!? ------------------ Geht nicht, gibt's nicht! ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 03. Dez. 2015 13:02 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo API-Fabi Zitat: Original erstellt von API-Fabi: zugegeben, ich bin kein Api-Profi. Aber ich dachte, dass mir da jemand helfen kann oder ist das hier ein Club der Ultra-Profis?
Nein, ist es sicher nicht, ich zähle mich wie Heinz vermutlich auch eher zu den Hobby-Programmierern. Aber ich verstehe, dass im Hinblick auf den Anspruch für den Einen Hobby ist, was für den Anderen Ultra-Profis zu sein scheinen. Zitat: Original erstellt von API-Fabi: 1.Ich öffne unterschiedliche Dokumente. Z.B. 2 Baugruppen und 2 Einzelteile. 2.Ich möchte nicht dass mein Makro nur Baugruppen oder Einzelteile speichert, sondern beides. Das Problem ist, dass das Makro dann auch die Unterkomponenten der Baugruppe speichert. Das soll es aber nicht. Es soll praktisch nur die Dokumente speichern, die ich auch händisch geöffnet habe.Sonst könntet ihr mir doch gleich sagen, was ich zu tun habe!?
Das macht die Sache klarer, so hatte ich sogar deinen ursprünglichen Post interpretiert. Da hatte ich dich auf das SldWorks::EnumDocuments2 hingewiesen, explizit mit dem Hinweis auf den unterschied zwischen geöffnet und sichtbar. Okay, das war kein fertiger Makrocode, aber das erwarte ich persönlich dann von einem Fragesteller, dass er dann da weiter nachschaut, weiterliest und probiert. In der API Hilfe steht dann z.B. explizit drin: [...]This includes IModelDoc2 objects that may have been opened as file references, for example, from an assembly or drawing. You might want to use the IModelDoc::Visible property to determine if a particular document has its own window and is visible to the user. Also: wenn du die Schleife so weit hast prüfst du mit myModel.Visible, ob es sichtbar ist, sprich ein geöffnetes Fenster in SolidWorks hat, das sollten dann diejenigen sein, die du per Hand geöffnet hast. Ciao, Stefan PS: bitte nimm es nicht als abkanzeln oder elitärem Bashing (so kommt das sicher bei manchen an), sondern als Anregung und Erklärung. Wenn ich das nicht mehr mache und einfach nicht mehr antworte hättest du eine potentielle Hilfe verloren.
------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
API-Fabi Mitglied CAD/PLM Admin
Beiträge: 56 Registriert: 23.11.2015 SOLIDWORKS 2020 SP5 Windows 10 SAP-PLM Interface (CAD-Desktop)
|
erstellt am: 03. Dez. 2015 13:17 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan, Vielen Dank! Das war der entscheidende Hinweis! Mit myModel.Visible funktioniert das einwandfrei. Ich nehme das euch nicht übel. Bin manchmal nur bisschen verzweifelt, wenn ich auf dem Schlauch stehe. Ohne euch wäre ich ja schließlich verloren! Also VIELEN DANK euch beiden!!
------------------ Geht nicht, gibt's nicht! ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerald1163 Mitglied Techniker
Beiträge: 2 Registriert: 26.02.2016
|
erstellt am: 26. Feb. 2016 09:45 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
|
API-Fabi Mitglied CAD/PLM Admin
Beiträge: 56 Registriert: 23.11.2015 SOLIDWORKS 2020 SP5 Windows 10 SAP-PLM Interface (CAD-Desktop)
|
erstellt am: 26. Feb. 2016 13:32 <-- editieren / zitieren --> Unities abgeben:
|
gerald1163 Mitglied Techniker
Beiträge: 2 Registriert: 26.02.2016
|
erstellt am: 29. Feb. 2016 08:01 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
|
Romeo vs. SWX Mitglied Konstrukteur
Beiträge: 6 Registriert: 25.10.2016
|
erstellt am: 25. Okt. 2016 17:09 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo Fabi, Ich finde die Grund-idee des Makros klasse. Bei meinem Vesuch mit Solidworks 2016 habe ich das Makro leider nicht wie gewünscht zum laufen bekommen. Es speichert ein Step ab und bricht danach mit folgender Meldung ab: Laufzeitfehler `-2147417848 (80010108)`: Automatisierungsfehler Das aufgerufene Objekt wurde von dem Clients getrennt. Ist dir so etwas schon mal untergekommen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003 SolidWorks 2023 SP5 mit Enterprise PDM , Windows 11, Dell Precision 3660, i7-12700K, 96 GB DDR-Ram, Quadro RTX A4000
|
erstellt am: 25. Okt. 2016 18:07 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo Romeo, hast du schon mal die Verweise überprüft? Evtl. musst du diese auf die SWX2016-Version "umbiegen". Dazu im VBA-Editor unter Extras/ Verweise... aufrufen und die entsprechenden Eintragungen vornehmen. ------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Romeo vs. SWX Mitglied Konstrukteur
Beiträge: 6 Registriert: 25.10.2016
|
erstellt am: 26. Okt. 2016 07:23 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo, die gekennzeichneten Haken waren schon aktiviert. Ich hab jetzt nochmal ohne Sinn und Verstand alles was nach SWX 2016 klingt, aktiviert. Das brachte natürlich keine Besserung. gibts noch andere Ansätze? Läuft das Tool bei euch makellos? Gruß Romeo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003 SolidWorks 2023 SP5 mit Enterprise PDM , Windows 11, Dell Precision 3660, i7-12700K, 96 GB DDR-Ram, Quadro RTX A4000
|
erstellt am: 26. Okt. 2016 07:34 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
|
Romeo vs. SWX Mitglied Konstrukteur
Beiträge: 6 Registriert: 25.10.2016
|
erstellt am: 26. Okt. 2016 08:44 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Dann liegt der Schluss, dass es an SWX 2016 liegt ja schon recht nahe. Ich hab SP3. beim googlen hab ich den Fehler nur in verbindung mit Excel gefunden. Ich bin dort allerdings nicht so richtig durchgestiegen, da ich mich mit VBA nicht auskenne. (habe nur etwas Erfahrung mit VBS) gibts noch ne Idee? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 26. Okt. 2016 09:24 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo Romeo, Zitat: Original erstellt von Romeo vs. SWX: Dann liegt der Schluss, dass es an SWX 2016 liegt ja schon recht nahe.
Nein, eigentlich nicht, da liegt der Schluss eher nah, dass du irgendetwas bei dir hast oder machst, was so nicht vorgesehen ist oder das Makro noch eine Logiklücke hat Ich hab das Makro von API-Fabi oben gerade mal runter geladen, die Verweise aktualisiert wie Andreas (ad_man) beschrieben hat, ein Teil und eine Baugruppe geladen und das Makro lief einwandfrei in SW2016 SP4.0 auf Windows 7/64. Aber es liegt trotzdem an der Logik des Makros, ich hab im angehängten Screenshot mal ein paar Finger in die Wunden gelegt, da hast du dann einen Ansatz, um das richtig zu stellen. Wäre schön, wenn du das bei dir dann probieren und den korrigierten Code wieder hochladen könntest. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 26. Okt. 2016 09:36 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Code:
If myModel.GetType = SwConst.swDocumentTypes_e.swDocDRAWING Then MsgBox ("Dieses Makro kann nicht für Zeichnungen ausgeführt werden") Exit Sub End If
Mal für mein Weltbild die Frage: Steigt das Programm damit nicht nach der 1. Zeichnung komplett aus? Gruß, Christian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 26. Okt. 2016 10:12 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo Romeo, bei mir läuft das Macro nur sauber durch wenn ich in der "For Each" Schleife die Angaben von "Part" durch "myModel" ersetzte. Wenn es dann immer noch nicht geht wird dir irgendeine Zeile beim wechsel in den Debugger markiert? Gruß Bernd [EDIT]Da waren ja wieder mal eineige schneller mit Antworten wie ich ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 26. Okt. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 26. Okt. 2016 10:17 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Zitat: Mal für mein Weltbild die Frage: Steigt das Programm damit nicht nach der 1. Zeichnung komplett aus?
Hallo Christian, genau so ist es aber vielleicht war das von dem Macroersteller ja so gewünscht, ich würde in der Schleife auch einfach nur geöffnete Zeichnungen überspringen. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 26. Okt. 2016 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Zitat: ... aber vielleicht war das von dem Macroersteller ja so gewünscht, ich würde in der Schleife auch einfach nur geöffnete Zeichnungen überspringen ...
Hallo Bernd, dann denke ich, dass es bei dem Quellmakro so gewünscht war und dieses noch keine Schleife hatte Gruß, Christian. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Romeo vs. SWX Mitglied Konstrukteur
Beiträge: 6 Registriert: 25.10.2016
|
erstellt am: 26. Okt. 2016 12:39 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo, mit dem Tipp von Bernd ("Part" in "Mymodel" ändern) läuft es bei Einzelteilen absolut sauber. Bei Baugruppen tritt der Fehler nach gefühlt jeder 3. Baugruppe auf. leider konnte ich noch kein Schema dabei erkennen. Im angehangenen Makro habe ich noch die Logik wohin gespeichert wird, auf meine betriebliche Situation angepasst. (15 Stellige Artikelnummern) MfG Romeo
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 26. Okt. 2016 14:16 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo Romeo, hier kommt das von Stefan gekennzeichnete "BOOM" zum tragen, da bei ungünstiger Abarbeitungsreihenfolge, Objecte entladen (geschlossen) werden die aber noch in myModels drin stehen die dann aber zum Zeitpunkt wenn er diese verarbeiten will einfach nicht mehr da sind, dass passiert denke ich z.B. beim vorhanden sein von Unterbaugruppen, virtuellen Komponenten oder Mehrfachverwendeten Teilen in Baugrupen. Im Bild sieht man z.B. das nach dem 1. Durchlauf gleich ein guter Schwung Objecte entladen wurden. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Romeo vs. SWX Mitglied Konstrukteur
Beiträge: 6 Registriert: 25.10.2016
|
erstellt am: 26. Okt. 2016 15:21 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
|
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 26. Okt. 2016 15:41 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 26. Okt. 2016 15:58 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo Romeo, dieses Macro hier ist ja nur eines von vielen und auch noch ein sehr abgespecktes was wahrscheinlich beim Macroersteller funktioniert weil er weiß auf was er zu achten hat. Für die Massenkonvertierung gibt es hier im Brett oder im WWW aber auch noch andere Macros die etwas aufwändiger gestrickt sind. Du könntest für eine schnelle Lösung einfach das schließen auskommentieren, dann musst du halt am Ende wenn das Macro durchgelaufen ist die Dokumente eben Manuell schließen. Evtl. solltest du dir auch mal Stefans PAC4SWX anschauen das kann ziemlich viel in diese Richtung Hier entlang Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 26. Okt. 2016 16:14 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
|
Romeo vs. SWX Mitglied Konstrukteur
Beiträge: 6 Registriert: 25.10.2016
|
erstellt am: 27. Okt. 2016 16:47 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Ohne das Schließen läuft alles perfekt. Man kommt ja auch über Fenster --> alle schließen schnell zum Ziel. Leider hab ich nicht die Zeit mich so an dem Code zu verkünsteln wie ich gern würde. Ich danke euch allen für eure Unterstützung. Gruß Romeo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dimikuhn Mitglied Freiberuflicher Ingenieur
Beiträge: 10 Registriert: 05.11.2011 Win10 64bit SW 2016
|
erstellt am: 06. Dez. 2016 15:22 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Hallo zusammen, da ich mich gerade wieder recht oft mit der SolidWorks API beschäftige, habe ich den von Euch verwendeten Code etwas umgeschrieben. Somit sollte das Schließen der Dateien am Ende auch funktionieren. Der Code ist sicherlich noch nicht perfekt. Die Abfrage (Answer; MsgBox; Select Case) kann, je nach Anforderung auch entfernt werden. Viele Grüße ' ************************************************** Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim myModels() As ModelDoc2 Dim myModel As Variant Dim SavePath As String Dim longstatus As Long Dim Answer As Long Dim IncludeUnsaved As Boolean Dim bRet As Boolean Sub Main() ' An SolidWorks anbinden Set swApp = Application.SldWorks ' An aktives Document anbinden Set swModel = swApp.ActiveDoc ' Prüfen ob ein Dokument geoeffnet ist, wenn nicht -> abbrechen If swModel Is Nothing Then MsgBox "Bitte öffnen Sie ein Dokument.", vbCritical, "Fehler: Kein Dokument geöffnet" GoTo Abbrechen End If ' Speichere alle (im Arbeitsspeicher) geöffneten Dokumente in ein Array des Types "ModelDoc2" myModels = swApp.GetDocuments ' Eingebefeld für den Pfad anzeigen NewFilePath = InputBox("Bitte geben Sie den Pfad an, in dem Ihre Auswahl gespeichert werden soll.", "STEP EXPORT") ' Pruefen ob ein Pfad eingetragen wurde, wenn nicht -> abbrechen If NewFilePath = "" Then MsgBox "Bitte einen Pfad angeben.", vbCritical, "Fehler: Kein Pfad gewählt!" GoTo Abbrechen End If ' Für jede geoeffnete Datei in "myModels" tue ... For Each myModel In myModels ' Wenn Datei vom Typ "swDocPART" oder "swDocASSEMBLY" tue ... If myModel.GetType = SwConst.swDocumentTypes_e.swDocPART Or myModel.GetType = SwConst.swDocumentTypes_e.swDocASSEMBLY Then ' wenn Datei sichtbar (eigenes Fenster) tue... If myModel.Visible = True Then 'Dokument aktivieren swApp.ActivateDoc2 myModel.GetTitle, False, longstatus 'Ansicht Isometrisch (ist nicht notwendig wenn Dateien am Ende geschloßen werden sollen!) myModel.ShowNamedView2 "*Isometrisch", 7 'Fensterfüllend zoomen (ist nicht notwendig wenn Dateien am Ende geschloßen werden sollen!) myModel.ViewZoomtofit2 ' Speicherpfad zusammenstellen SavePath = NewFilePath & "\" & Left(myModel.GetTitle, Len(myModel.GetTitle) - 6) & "STEP" ' Als STEP-Datei speichern longstatus = myModel.SaveAs3(SavePath, 0, 0) ' Prüfen ob das Speichern geklappt hat If longstatus <> 0 Then MsgBox "Beim speichern als STEP-Datei: " & SavePath & " ging etwas schief!" & Chr(13) & "Fehler: " & longstatus, vbCritical, "Fehler beim speichern!" GoTo Abbrechen End If End If End If Next ' Abfrage "Dokumente schließen?" Answer = MsgBox("Ja = Alle Dokumete werden geschloßen. Achtung, kein speichern!" & Chr(13) & "Nein = Ungespeicherte Dokumente bleiben offen." & Chr(13) & "Abbrechen = Alle Dokumente bleiben offen.", vbYesNoCancel, "Dokumente schließen.") ' Je nach Antwort tue ... Select Case Answer Case vbCancel GoTo Abbrechen Case vbYes IncludeUnsaved = True Case vbNo IncludeUnsaved = False End Select ' Dokumente schließen! bRet = swApp.CloseAllDocuments(IncludeUnsaved) ' Prüfen ob beim schließen alle gut ging! If bRet = False Then MsgBox "Beim schließen aller geöffneten Dokumente ging etwas schief.", vbCritical, "Fehler: Schließen der Dokumente!" GoTo Abbrechen End If Abbrechen: ' Objekte (Speicher) freigeben Set swModel = Nothing Set swApp = Nothing End Sub [Diese Nachricht wurde von dimikuhn am 06. Dez. 2016 editiert.]
[Diese Nachricht wurde von dimikuhn am 29. Jan. 2017 editiert.] [Diese Nachricht wurde von dimikuhn am 29. Jan. 2017 editiert.] [Diese Nachricht wurde von dimikuhn am 29. Jan. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |