| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| SolidCAM im Einsatz bei der August Weckermann KG |
Autor
|
Thema: Makro: Alle Zeichnungen einer Baugruppe öffnen (6393 mal gelesen)
|
currie Mitglied Betriebsmittelkonstrukteur
Beiträge: 83 Registriert: 10.03.2005 WIN10 / SWX2020
|
erstellt am: 17. Feb. 2011 13:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich habe im www diesen Queltext gefunden, siehe unten. Wenn ich das Makro Starte werden bei mir alle Teile in der Baugruppe geöffnet. Aber es sollen alle Zeichnugen göffnet werden. Wenn ich den Pfad + Name in einer Massege Box anzeigen lasse bekomme ich den Pfad+Name mit "slddrw" es wird aber das Teil geöffnet. Ich komme nicht dahinter wo der fehler liegt. Kann mir bitte einen Tip geben. ' --------------------------------------------------------------------06/02/2006 ' Open Assembly Components ' OpenAssyComp.swp - By handleman Copyright 2006 ' This macro is provided as is. No claims, support, refund, safety net, or ' warranties are expressed or implied. By using this macro in any way, the user ' holds the author and all others free from all liability. ' This macro is based on discussion at: http://www.eng-tips.com/viewthread.cfm?qid=156219& ' ------------------------------------------------------------------------------ ' Description: ' Traverses the open assembly and activates all components and their drawings (if of the ' same name). ' ------------------------------------------------------------------------------ ' Version - By Matthew Lorono ' 1.01 * Saved macro as sourced from above link. ' 1.02 * Add this common description comment area. ' ------------------------------------------------------------------------------ Sub ShowAllOpenFiles() Dim swDoc As SldWorks.ModelDoc2 Dim swAllDocs As EnumDocuments2 Dim FirstDoc As SldWorks.ModelDoc2 Dim dummy As Boolean Dim NumDocsReturned As Long Dim DocCount As Long Dim i As Long Dim sMsg As String Dim swApp As SldWorks.SldWorks Dim bDocWasVisible As Boolean Dim OpenWarnings As Long Dim OpenErrors As Long Dim DwgPath As String Dim myDwgDoc As SldWorks.ModelDoc2 Set swApp = Application.SldWorks Set swAllDocs = swApp.EnumDocuments2 Set FirstDoc = swApp.ActiveDoc DocCount = 0 swAllDocs.Reset swAllDocs.Next 1, swDoc, NumDocsReturned While NumDocsReturned <> 0 bDocWasVisible = swDoc.Visible swApp.ActivateDoc swDoc.GetPathName DwgPath = swDoc.GetPathName MsgBox DwgPath, , "DwgPath" ' Hier kommt Pfad + Name des Teils If (LCase(Right(DwgPath, 6)) <> "slddrw") And (DwgPath <> "") Then DwgPath = Left(DwgPath, Len(DwgPath) - 6) & "slddrw" MsgBox DwgPath, , "DwgPath" ' Hier kommt Pfad + Name der Zeichnung Set myDwgDoc = swApp.OpenDoc6(DwgPath, swDocDRAWING, swOpenDocOptions_Silent, "", OpenErrors, OpenWarnings) If Not myDwgDoc Is Nothing Then swApp.ActivateDoc myDwgDoc.GetPathName Set myDwgDoc = Nothing End If End If swAllDocs.Next 1, swDoc, NumDocsReturned DocCount = DocCount + 1 Wend swApp.ActivateDoc FirstDoc.GetPathName End Sub '-------------------------------------------------------------------- Currie 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: 17. Feb. 2011 13:28 <-- editieren / zitieren --> Unities abgeben: Nur für currie
|
currie Mitglied Betriebsmittelkonstrukteur
Beiträge: 83 Registriert: 10.03.2005 WIN10 / SWX2020
|
erstellt am: 17. Feb. 2011 14:02 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von nahe: Halloich hab jetzt keine Ahnung ob es dann so funktioniert wie Du Dir das vorstellt, aber ich würde mal die Zeile "swApp.ActivateDoc swDoc.GetPathName" rausnhemen
Hallo Nahe Ich hab deine Vorschlag probiert und es werden immer noch die Teile geöffnet Ich verstehe nicht dass ich hier bei der MsgBox " "DwgPath" den Pfad und Dateiname mit "slddrw" angezeigt bekomme. Danach sollte doch auch diese Datei geöffnet werden, oder. MsgBox DwgPath, , "DwgPath" ' Hier kommt Pfad + Name der Zeichnung Set myDwgDoc = swApp.OpenDoc6(DwgPath, swDocDRAWING, swOpenDocOptions_Silent, "", OpenErrors, OpenWarnings) Danke
Currie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
THSEFA Mitglied Konstrukteur/CAD-Admin
Beiträge: 1141 Registriert: 27.11.2002 SWX 2020 SP5.0 Premium Windows 10 Pro 64Bit Citrix VM Intel(R) XEON(R) Gold 6146 CPU @ 3.20GHz 24 GB Ram<P>Windows 10 Pro 64Bit
|
erstellt am: 17. Feb. 2011 14:45 <-- editieren / zitieren --> Unities abgeben: Nur für currie
Ich arbeite auch an so einem Makro, wenn es meine Zeit zulässt. Hier mein Code:
Code: Sub CT_Print_all_Drawings() Dim swDoc As SldWorks.ModelDoc2 Dim swAllDocs As EnumDocuments2 Dim FirstDoc As SldWorks.ModelDoc2 Dim dummy As Boolean Dim NumDocsReturned As Long Dim DocCount As Long Dim i As Long Dim swApp As SldWorks.SldWorks Dim OpenWarnings As Long Dim OpenErrors As Long Dim DwgPath As String Dim myDwgDoc As SldWorks.ModelDoc2Set swApp = Application.SldWorks Set swAllDocs = swApp.EnumDocuments2 Set FirstDoc = swApp.ActiveDoc ''' Set swApp = CreateObject("SldWorks.Application") Set ModelDoc2 = swApp.ActiveDoc ' dann war gar kein Dokument geöffnet, wie soll da was funktionieren If ModelDoc2 Is Nothing Then MsgBox " Kein Dokument geöffnet! ", vbExclamation End End If ' wenn keine Assembly aktiv ist wird das Makro wieder beendet If (ModelDoc2.GetType <> swDocASSEMBLY) Then MsgBox " Nur für Baugruppen geeignet! ", vbExclamation End End If ''' ''' DocCount = 0 swAllDocs.Reset swAllDocs.Next 1, swDoc, NumDocsReturned While NumDocsReturned <> 0 swApp.ActivateDoc swDoc.GetPathName DwgPath = swDoc.GetPathName If (VBA.LCase(VBA.Right(DwgPath, 6)) <> "slddrw") Then DwgPath = VBA.Left(DwgPath, Len(DwgPath) - 6) & "slddrw" Set myDwgDoc = swApp.OpenDoc6(DwgPath, swDocDRAWING, swOpenDocOptions_Silent, "", OpenErrors, OpenWarnings) If myDwgDoc Is Nothing Then swApp.CloseDoc swDoc.GetPathName End If If Not myDwgDoc Is Nothing Then swApp.CloseDoc swDoc.GetPathName 'myDwgDoc.PrintDirect ''auskommentiert um Papier zu sparen swApp.CloseDoc myDwgDoc.GetPathName Set myDwgDoc = Nothing End If End If swAllDocs.Next 1, swDoc, NumDocsReturned DocCount = DocCount + 1 Wend swApp.ActivateDoc FirstDoc.GetPathName End Sub
Leider ist dies ein Stadium, welches noch nicht funktioniert...
[Diese Nachricht wurde von THSEFA am 17. Feb. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mkkk Mitglied
Beiträge: 105 Registriert: 04.03.2005
|
erstellt am: 17. Feb. 2011 14:58 <-- editieren / zitieren --> Unities abgeben: Nur für currie
Ich glaube Du hast da den falschen Ansatz. Eine Baugruppe kann nur Bauteile oder Baugruppen (Unterbaugruppen) verarbeiten und kennen. Von ihm abgeleitete Zeichnungen sind in einer Baugruppe nicht bekannt.
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: 18. Feb. 2011 07:09 <-- editieren / zitieren --> Unities abgeben: Nur für currie
Hallo @mkkk dem kann ich so nicht zustimmen! Wenn der Dateiname der Zeichnung gleich ist wie der des Teils und auch im selben Verzeichnis gespeichert ist, dann ist das ok. Bei mir läuft das Makro auch ein so einigermaßen :-) Problematisch wird es wenn, z.B.: für die Zeichnung eine andere Konfiguration verwendet wird, als die die in der Baugruppe verbaut ist oder wenn in der Baugruppe mehrere Konfigurationen des selben Teils verbaut sind und es für jede Konfiguration eine Zeichnung gibt, dann müsste man noch den Konfigurationsnamen berücksichtigen. dann wird keine Zeichnung geöffnet. PS @currie meinen Hinweis weiter oben, kannst Du vergessen die Zeile "swApp.ActivateDoc swDoc.GetPathName" ist scheinbar doch notwendig
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation
Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 18. Feb. 2011 08:18 <-- editieren / zitieren --> Unities abgeben: Nur für currie
Nur mal so als Idee: Wieso machst Du es nicht andersrum? Du suchst Deine Zeichnungen nach Teile ab und lässt die Zeichnung offen, wenn das Teil in Deiner Baugruppe vorkommt? Wie man ein Teil aus der Zeichnung öffnet, kann ich dir dann schreiben, wenn Du möchtest. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
THSEFA Mitglied Konstrukteur/CAD-Admin
Beiträge: 1141 Registriert: 27.11.2002 SWX 2020 SP5.0 Premium Windows 10 Pro 64Bit Citrix VM Intel(R) XEON(R) Gold 6146 CPU @ 3.20GHz 24 GB Ram<P>Windows 10 Pro 64Bit
|
erstellt am: 18. Feb. 2011 09:31 <-- editieren / zitieren --> Unities abgeben: Nur für currie
Zitat: Original erstellt von GDawg: Nur mal so als Idee:Wieso machst Du es nicht andersrum? ...
Meine Intention war es, aus einer BG heraus alle verfügbaren Zeichnungen mit einem Rutsch zu drucken. Wir brauchen sowas öfters mal. Wenn du dann eine BG mit 142 Teilen hast, dauert das per Hand auch schon mal eine Weile. Da wir sogut wie nie Konfigurationen in unseren Teilen haben, es pro Teil auch nur eine Zeichnung gibt, können wir den oben beschrittenen Weg auch gehen. Leider kann ich mich immer weniger um diese Art von Makros kümmern. Da ich selbst relativ wenig Ahnung davon habe, dauert es eben auch ganz schön lange. Aber es kommen auch wieder bessere Zeiten! ------------------ Viele Grüße, THSEFA Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation
Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 18. Feb. 2011 09:48 <-- editieren / zitieren --> Unities abgeben: Nur für currie
Zitat: Original erstellt von THSEFA: Meine Intention war es, aus einer BG heraus alle verfügbaren Zeichnungen mit einem Rutsch zu drucken.
Das habe ich auch so verstanden. Nur leider funktioniert nicht einmal mehr die SolidWorks Funktion "Zeichnung öffnen". Das hat früher einmal funktioniert. Also, eigentlich weisst Du ja nur indem Du die Namen gleich vergibst, welche Zeichnung Du öffnen musst...? Ich wäre den Weg gegangen, (per Makro!) die erste Zeichnung öffnen, Modelnamen prüfen, mit Baugruppe prüfen ob der Name in der BG ist, wenn ja, Zeichnung drucken. Ich hatte mal ein Makro geschrieben, welches alle offenen Zeichnungen auf einen Rutsch druckt. Mit Wunsch auch noch DXF und PDF von den Zeichnungen, STL und STEP vom Modell auf der Zeichnung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
currie Mitglied Betriebsmittelkonstrukteur
Beiträge: 83 Registriert: 10.03.2005 WIN10 / SWX2020
|
erstellt am: 18. Feb. 2011 13:55 <-- editieren / zitieren --> Unities abgeben:
Hallo Es freut mich dass ihr euch beteiligt, nur dass kein irrtum entsteht. Ich lese mit, kann aber nicht mehr folgen. Das Ursprüngliche Problem war ja dass in dem Makro vor Set myDwgDoc = swApp.OpenDoc6(DwgPath, swDocDRAWING, swOpenDocOptions_Silent, "", OpenErrors, OpenWarnings) Habe ich mit derMsG Box "DwgPath" ausgelesen. Das war 100% die Zeichnung die geöffnet werden soll. aber = swApp.OpenDoc6(DwgPath, swDocDRAWING, .... öffnet das Teil. Warum? Dies würde ich gerne wissen Currie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation
Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 18. Feb. 2011 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für currie
Also, das hier öffnet die Zeichnung wie erwartet: Code:
Dim strFileName As String Dim swDrawing As SldWorks.DrawingDoc strFileName = "C:\Dist.Rohr-705.SLDDRW" Set swDrawing = swApp.OpenDoc6(strFileName, 3, 0, "", longstatus, longwarnings)
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: 18. Feb. 2011 14:10 <-- editieren / zitieren --> Unities abgeben: Nur für currie
Hallo nochmals also bei mir funktioniert das Makro bis auf die oben beschriebenen Einschränkungen Hast Du schon mal versuchtbdas Makro im Einzelschrittmodus zu durchlaufen?
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
currie Mitglied Betriebsmittelkonstrukteur
Beiträge: 83 Registriert: 10.03.2005 WIN10 / SWX2020
|
erstellt am: 18. Feb. 2011 14:19 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von nahe: Hallo nochmalsalso bei mir funktioniert das Makro bis auf die oben beschriebenen Einschränkungen Hast Du schon mal versuchtbdas Makro im Einzelschrittmodus zu durchlaufen?
Hallo zu meiner Schande, nein! Ich werde es aber am WE probiern Vielen Dank Currie 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: 21. Feb. 2011 14:08 <-- editieren / zitieren --> Unities abgeben: Nur für currie
|
currie Mitglied Betriebsmittelkonstrukteur
Beiträge: 83 Registriert: 10.03.2005 WIN10 / SWX2020
|
erstellt am: 21. Feb. 2011 15:06 <-- editieren / zitieren --> Unities abgeben:
Hallo KMassler Das war der richtige tip. Jetzt werden die Zeichnungen geöffnet, allerdings auch die Modell, was ich nicht so ganz verstehe. Zumindest kann ich jetzt weiter probieren Vielen Dank Currie 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: 21. Feb. 2011 15:25 <-- editieren / zitieren --> Unities abgeben: Nur für currie
Ja nun. Das macht er natürlich bei dem swApp.ActivateDoc swDoc.GetPathName Nimm das raus, dann klappts auch mit dem Nachbarn. Da du die Komponenten ja gar nicht laden willst, sondern nur den Dateinamen auslesen, ist das ActivateDoc überflüssig. Möglicherweise ein kleines Problem bei der Verwendung von "EnumDocuments2": Damit werden alle geöffneten bzw. geladenen Dokumente abgearbeitet, nicht nur deine aktuelle Baugruppe. Wenn du also noch andere Modelle zu der Zeit göffnet hast, werden die Zeichnungen dazu auch geladen. ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim [Diese Nachricht wurde von KMassler am 21. Feb. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
currie Mitglied Betriebsmittelkonstrukteur
Beiträge: 83 Registriert: 10.03.2005 WIN10 / SWX2020
|
erstellt am: 21. Feb. 2011 22:29 <-- editieren / zitieren --> Unities abgeben:
|
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation
Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 22. Feb. 2011 07:17 <-- editieren / zitieren --> Unities abgeben: Nur für currie
|
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: 22. Feb. 2011 08:06 <-- editieren / zitieren --> Unities abgeben: Nur für currie
Zitat: Original erstellt von currie: ... Frage: Wo, kann man das nachlesen, was z.B "swApp.ActivateDoc swDoc.GetPathName" macht? ...
Wie GDawg richtig schreibt: Schau erst mal in der API-Hilfe von Solidworks. Das WWW ist in diesem Fall erst die 2. Wahl (oder 3.) swApp.ActivateDoc(Name des doks) aktiviert ein Dokument. Wenn es bis dahin nicht aktiv geladen ist, dann wird es das. und swDoc.GetPathname liefert in diesem Fall den Namen des zu aktivierenden Dokuments. ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
currie Mitglied Betriebsmittelkonstrukteur
Beiträge: 83 Registriert: 10.03.2005 WIN10 / SWX2020
|
erstellt am: 22. Feb. 2011 10:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich hab's gewust dass ich den Weg zur API Hilfe bekomme. Das ist mir klar dass alles in der API Hilfe steht. Wenn man als Anfänger in die API Hilfe schaut ist das auch nicht sehr hilfreich. Irgend wie fehlt mir der Einstieg. Danke Nochmal an alle Currie 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: 22. Feb. 2011 12:12 <-- editieren / zitieren --> Unities abgeben: Nur für currie
Hallo Currie dafür gibt es in der Online-Hilfe bei etlichen Methoden und Eigenschaften sehr oft Code Beispiele für ActivateDoc z.B.: Add Component and Mate (VBA) Get Corresponding Note in Assembly (VBA) Get Corresponding Note in Part (VBA) Open Part From Assembly (VBA) Add Smart Components (C#) Add Smart Components (VB.NET) Add Smart Components (VBA) PS Du musst dann halt ein wenig stöbern um das zu finden, was Du gerade brauchen kannst ------------------ Grüße Heinz [Diese Nachricht wurde von nahe am 22. Feb. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |