Automatischer Makro-Export beim Öffnen eines Clips

Hallo

Ich möchte ein Makro erstellen, um einen Plan automatisch in PDF und JPEG zu exportieren, sobald er geöffnet wird, und ihn dann wieder zu schließen.

Ich weiß, dass diese Funktion seltsam erscheinen mag, aber ich habe meine Gründe, und die Erklärung wird lang sein...

Ich habe diesen Macor als Beispiel gefunden, der Teile von dem zu enthalten scheint, was ich suche:

https://www.codestack.net/solidworks-api/document/macro-feature/model-load-watcher/

In diesem Beispiel wird jedes Mal, wenn die Datei, in der das Makro iteriert wird, geöffnet wird, eine "Log"-Textdatei ausgefüllt.

Wie immer verstehe ich nicht viel, aber ich versuche zu entschlüsseln, um Fortschritte zu machen.

Das Makro besteht aus zwei Modulen: Macro und HandlerModule. Ich dachte, dass der eine es Ihnen ermöglichte, das Makro beim Start zu schnüren und der andere die auszuführende Aufgabe enthielt, aber beim Lesen des Codes bin ich mir nicht mehr wirklich sicher. Ich habe ein Makro, mit dem Sie in PDF oder / und JPEG exportieren können, aber ich bin mir nicht sicher, ob das Einfügen in das HandlerModule das richtige Verfahren ist.

Ein weiterer Punkt, der mich stört und der Ihnen vielleicht auch in die Augen gestochen hat, ist das automatische Schließen des Dokuments nach dem Export. Wenn ich auf normale Weise an meinem Dokument arbeiten möchte, gibt es ein Problem: Ich öffne es, und zack, es wird geschlossen. Wenn ich mein Makro nicht in das Dokument einbette, sollte ich in der Lage sein, mich auszutricksen, indem ich das Makro vorübergehend in ein anderes Verzeichnis verschiebe. Aber gibt es einen anderen Weg?

Schließlich, und auch wenn es sehr zweitrangig ist, ist es möglich, Folio "1" in PDF und Folio "2" in JPEG zu exportieren?

Danke für Ihre Hilfe

Hallo

Zunächst einmal werde ich keine Feature-Makros verwenden, sondern das Solidworks Ereignismanagement (Erkennung des Öffnens einer Datei und anschließende Verarbeitung durch das Makro).

Dies würde erfordern, die ausführbare Datei für den SW-Start so zu ändern, dass ein Makro hinzugefügt wird, das beim Öffnen von SW in den Arbeitsspeicher geladen wird.

Für die etwas inkompatible Seite, automatisch arbeiten und exportieren zu wollen, sehe ich, abgesehen vom Öffnen eines Fensters (msgbox), in dem Sie auswählen können, was Sie tun möchten, keine allzu große Lösung.

Andernfalls verwenden Sie den SW-Taskplaner, um diese Batch-Exporte durchzuführen.

Für die letzte Frage, ja, das ist möglich, Sie müssen nur einerseits sicher sein, dass es nur 2 Folios sind, andernfalls müssen Sie eine zusätzliche Verarbeitung durchführen, um zu wissen, in welches Dateiformat exportiert werden soll.

1 „Gefällt mir“

Das Featuremakro bettet das Makro (wie eine Funktion) in die Assembly ein, sodass der Code bei jedem Öffnen der Datei neu gestartet wird. Jedes Mal, wenn Sie die Datei öffnen, wird das Makro gestartet und die Dateien werden Ihnen in PDF und JPG exportiert.

Ich bin mir nicht sicher, ob dies das ist, wonach Sie suchen.

Wenn Sie nur eine Stapelverarbeitung aus einer Liste von Dateien durchführen möchten, ist dies eindeutig nicht das richtige Makro für Sie.

In diesem Fall ist diese Art von Programm oder Makro für Ihre Anfrage besser geeignet:

http://swtools.cad.de/us_prog_pac.htm

https://cadplus.xarial.com/batch/

https://www.youtube.com/watch?v=jpaOxtsZSKA

https://www.cadsharp.com/blog/run-solidworks-macros-using-task-scheduler/

Es gab auch ein Programm, das gut funktionierte, aber ich kann es nicht mehr finden, mit dem man sein eigenes Makro starten konnte.

Ich für meinen Teil verwende Integration (ein MycadTools-Tool von Visiativ - https://help.visiativ.com/mycadtools/2020/fr/Integration.html)

 

@ Cyril.f:

Das Ändern der  ausführbaren SW-Startdatei scheint mir für mein dummes Niveau etwas zu aufdringlich zu sein

Die Verwendung des Taskplaners von SW entspricht nicht meinen Bedürfnissen: Der Export muss erfolgen, ohne Solidworks zu berühren. In diesem Fall klickt eine durchschnittliche Person (oder sogar ein Computerprogramm) auf eine Schaltfläche (ein .bat) und ruft die PDF-Datei aus einem bestimmten Verzeichnis ab.

@ Sbadenis:

Das Featuremakro bettet das Makro (wie eine Funktion) in die Assembly ein, sodass der Code bei jedem Öffnen der Datei neu gestartet wird. Jedes Mal, wenn Sie die Datei öffnen, wird das Makro gestartet und die Dateien werden Ihnen in PDF und JPG exportiert. Ich bin mir nicht sicher, ob dies das ist, wonach Sie suchen.

Ja, genau!

Hallo

Die Änderung der ausführbaren Datei ist nicht sehr aufdringlich, es sind nur zusätzliche Befehlsparameter auf den Tastenkombinationen, wie zum Beispiel: 

"C:\Programme\SOLIDWORKS Corp\SOLIDWORKS\SLDWORKS.EXE" /m "C:\Meine Makros\Macro1.swb"

Das Makro startet also, sobald es sich öffnet.

Für das Feature-Makro ja, es erfüllt Ihre Anforderungen, aber nicht die Notwendigkeit, an den Dateien arbeiten zu können, da es die Datei systematisch exportiert und dann schließt. Grundsätzlich wird Ihre Datei meiner Meinung nach völlig unbrauchbar, es sei denn, Sie fügen jedes Mal ein Validierungsfenster hinzu, um zu wissen, was zu tun ist (schließen Sie die Datei oder lassen Sie sie offen).

Was den Taskplaner angeht, verstehe ich das nicht wirklich. In jedem Fall muss SW öffnen, um die Zeichnung zu öffnen und zu exportieren. Es wird nichts im Hintergrund getan, ohne jemals die Hauptsoftware zu öffnen.

1 „Gefällt mir“

Stimmen Sie @Cyril.f  voll und ganz zu, es sei denn, Sie verwenden das Teil oder die Baugruppe nie wieder, es ist unmöglich, eine Makrofunktion zu erstellen.

Was ist der Zweck, von Zeit zu Zeit das PDF und jpg eines definierten Teilesatzes oder einer Baugruppe zu erhalten?

Wenn ja, woraus aus einer Dateiliste oder einer 3D-Baugruppe, die die zu extrahierende Teile- oder Baugruppendatei enthält?

Ohne Ihren gesamten Prozess zu beantworten, scheinen diese Fragen unerlässlich zu sein, um eine korrekte Antwort zu geben.

 

Danke Cyril.f . Ich habe gerade verstanden, dass die "ausführbare Datei starten" nur die .bat ist, die das Öffnen meiner Datei befiehlt...

Ich schrieb folgendes:

start "C:\Programme\SLDWORKS.exe" "C:\Plan1.SLDDRW" /m "C:\PDF.swp exportieren"

Die Datei Plan1.SLDDRW wird gut geöffnet, aber das Makro wird nicht gestartet. Ich denke, das liegt daran, dass es keine Standard-App für .swp-Dateien gibt

Ich habe versucht, swvbaserver.exe und drawcompare.exe als Standard-App anzuwenden, aber ohne Erfolg.

Hallo

Ich glaube nicht, dass es von einer Anwendung kommt, die nicht für SWP-Dateien definiert ist, sondern mit dem Makro verknüpft ist, das keine "automatische" Ausführung hat. Ähnlich wie bei Word/Excel-Makros ist eine Ausführung zum Zeitpunkt des Eröffnungsereignisses erforderlich, um anschließend Aktionen auszulösen.

Hallo

 

 @Legnano

Ein weiterer Punkt, der mich stört und der Ihnen vielleicht auch in die Augen gestochen hat, ist das automatische Schließen des Dokuments nach dem Export. Wenn ich auf normale Weise an meinem Dokument arbeiten möchte, gibt es ein Problem: Ich öffne es, und zack, es wird geschlossen. Wenn ich mein Makro nicht in das Dokument einbette, sollte ich in der Lage sein, mich auszutricksen, indem ich das Makro vorübergehend in ein anderes Verzeichnis verschiebe. Aber gibt es einen anderen Weg?

 

Wie Sie vielleicht schon vermutet haben, ist es problematisch, diese Art von Makro zu verwenden. Meiner Meinung nach ist es am besten, eine Makroschaltfläche zu erstellen, mit der Sie Ihr Dokument in PDF/JPEG in den Ordnern Ihrer Wahl speichern und die Zeichnung schließen können. 

Sie können auch ein Makro erstellen, das die Zeichnung des Dokuments öffnet, das Sie in der Baumstruktur ausgewählt, gespeichert und geschlossen haben.

 

Sie müssen auch vorsichtig sein, da beim Öffnen einiger Zeichnungen die Dokumente aufgehellt werden und daher die "Raumblase" unsichtbar ist (dies ist eines meiner Zeichenprobleme und ich suche nach einer Makroaktion, um die Ansicht zu lösen)

 

Persönlich verwende ich keine ausführbare Startdatei , ich finde es etwas zu aufdringlich, auch wenn bei einigen meiner Makros die Anwendung nützlich sein könnte, aber sie sind nur für alte Dateien nützlich und ich denke, dass ich diese Art von Makro nicht in vorhandene Dateien integrieren kann.

Zurück zum Ausgangspunkt/ Nach all Ihren Bemerkungen passt mir am besten ein in den Plan integriertes Makro A, das fragt, wann der Plan geöffnet wird, um ein Makro B auszuführen, das in einem Verzeichnis vorhanden ist. Dieses Makro B sollte fragen:

1: Laden des Plans und der Komponenten in Solved

2: Exportieren Sie den Plan

3: Den Plan schließen, ohne zu sparen

Wenn ich normal mit dem Plan arbeiten möchte, lösche ich Makro B aus seinem Verzeichnis, wodurch die vorherigen Aktionen blockiert werden. Ich behandle die Fehlermeldung "Makro B nicht gefunden" manuell, da es sich um einen außergewöhnlichen Sonderfall handelt.

Für diejenigen, die meine Bitte seltsam finden, möchte ich erklären, warum, aber ich möchte nicht, dass es dieses Gespräch in ein Schlachtfeld verwandelt, auf dem ich sagen kann, ob sie es für eine gute oder schlechte Idee halten. Ich habe eine Excel-Datei, die die benutzerdefinierten Eigenschaften eines Raums ändert, ohne ihn öffnen zu müssen. Die Geometrie des Teils wird mit den Werten von Excel aktualisiert. Ein einfacher Klick auf eine Schaltfläche sollte die Veröffentlichung eines Raumplans im PDF-Format ermöglichen. All dies, damit der Benutzer SOLIDWORKS nicht verwenden muss.

Oben...

Warum nicht den gesamten Code in diesem Fall aus Excel machen?

Sie können SW tatsächlich von Excel aus steuern (auch wenn ich es noch nie persönlich ausprobiert habe)

Weitere Informationen finden Sie in diesem Thema und insbesondere unter STEUERN von Solidworks in einem Excel-Makro:

https://www.cadsharp.com/blog/using-microsoft-excel-with-the-solidworks-api/

EDIT: Ein weiteres Forenthema, das sich mit Excel befasst: https://www.lynkoa.com/forum/solidworks/macro-solidworks-excel

Vielen Dank, aber es wird nicht für meine Anwendung geeignet sein.
Ich werde weiter an der integrierten Makrolösung arbeiten, die das Öffnen anderer Makros erfordert. Im Moment heißt es Schlittschuhlaufen

Und doch sagst du:

Für diejenigen, die meine Bitte seltsam finden, möchte ich erklären, warum, aber ich möchte nicht, dass es dieses Gespräch in ein Schlachtfeld verwandelt, auf dem ich sagen kann, ob sie es für eine gute oder schlechte Idee halten. Ich habe eine Excel-Datei, die die benutzerdefinierten Eigenschaften eines Raums ändert, ohne ihn öffnen zu müssen. Die Geometrie des Teils wird mit den Werten von Excel aktualisiert. Ein einfacher Klick auf eine Schaltfläche sollte die Veröffentlichung eines Raumplans im PDF-Format ermöglichen. All dies, damit der Benutzer SOLIDWORKS nicht verwenden muss.

Es würde daher ausreichen, auf Ihrer Excel-Schaltfläche das Öffnen Ihres Teils und Ihres Plans in SOLIDWORKS zu programmieren, Ihren Folioplan 1 als PDF und Ihren Folioplan 2 als JPEG zu exportieren. Schließen Sie dann das Teil und die Baugruppe. All dies beim Programmieren in Excel.

Hier ist ein Stück Code, das aus Excel einen Raum und ein MEP öffnet, ich habe es gerade aus Neugier getestet und es funktioniert perfekt.

Sub EssaiSW()

 Dim swApp As SldWorks.SldWorks
    Dim swModelUn As SldWorks.ModelDoc2
    Dim swModelDeux As SldWorks.ModelDoc2

    If swApp Is Nothing Then
        Set swApp = CreateObject("SLDWORKS.application")
        swApp.Visible = True
    Else
        Set swApp = Application.SldWorks
    End If

    Set swDocSpecification = swApp.GetOpenDocSpec("C:\Users\sebastien.denis\Desktop\Pièce5.sldprt")
    Set swModelUn = swApp.OpenDoc7(swDocSpecification)
    MsgBox swModelUn.GetTitle
    
    Set swDocSpecification = swApp.GetOpenDocSpec("C:\Users\sebastien.denis\Desktop\Pièce5.slddrw")
    Set swModelUn = swApp.OpenDoc7(swDocSpecification)
    MsgBox swModelUn.GetTitle
    
    swApp.CloseDoc swModelUn.GetTitle
    
    Set swModelUn = swApp.ActiveDoc
    MsgBox swModelUn.GetTitle
    
    Set swDocSpecification = swApp.GetOpenDocSpec("C:\Users\sebastien.denis\Desktop\Pièce6.sldprt")
    Set swModelDeux = swApp.OpenDoc7(swDocSpecification)
    
    swApp.CloseDoc swModelUn.GetTitle

    MsgBox swModelDeux.GetTitle
    
    swApp.CloseDoc swModelDeux.GetTitle
    
    
End Sub

Vielen Dank an @d.roger für diesen Code, der an anderer Stelle in meinem obigen Link verfügbar ist.

Dann gibt es keine Möglichkeit mehr, das PDF und das JPEG zu exportieren. Was weitgehend erreichbar ist und ziemlich einfach sein sollte.

Es sei denn, mir fehlt noch ein Punkt?

Zu Ihrer Information, die eingebauten Makros, mit denen Sie mehrere von ihnen getestet haben, sind kompliziert zu implementieren und bleiben gefährlich, ganz zu schweigen von den Abstürzen mit ihnen.

 

1 „Gefällt mir“

Ich bin der gleichen Meinung, dass @sbadenis Makro, das in den Plan/Raum integriert ist, ich nie praktiziert habe, aber es scheint mir, dass es ziemlich komplex ist und ich es zu "aufdringlich" finde. 

Da Sie von einer Excel-Datei ausgehen, in der Sie die zu ändernden Abmessungen eingeben, denke ich, dass die einfachste eine Excel-Makroschaltfläche bleibt, die die Arbeit in Solidworks sendet.

 

Mit der Schaltfläche können Sie den Raum öffnen, die Abmessungen ausfüllen, den gespeicherten Plan öffnen und dann schließen, oder mit der Arbeit fortfahren, indem Sie die Abmessungen ändern und dann erneut speichern, wenn Sie einen Beistelltisch haben, mit dem Sie bei jedem Öffnen/Schließen einige Sekunden sparen können.

 

Wenn Sie vermeiden möchten, dass Ihre Benutzer Solidworks verwenden, denke ich, dass dies die beste Lösung ist. Es kann sein, dass Sie sich schnell ärgern, wenn Sie einen Plan ändern müssen und vergessen haben, das Makro zu verschieben, oder wenn Solidworks jedes Mal, wenn Sie einen Plan ändern/erstellen, ein Fenster für Sie öffnet, in dem steht, dass das Makro nicht gefunden wurde, ohne die möglichen Fehler/Bugs von Solidworks zu erwähnen.

 

Andernfalls, wenn ich Ihre Anfrage richtig verstehe, möchten Sie, dass der Benutzer im Windows Explorer auf die DRWG-Datei des Teils klickt. Solidworks öffnet diesen Plan , korreliert mit der geöffneten Excel-Datei , aktualisiert die Daten und speichert/schließt den Plan dann automatisch, ohne dass der Benutzer ihn sieht.

1 „Gefällt mir“

Ich würde immer noch gerne das eingebaute Makro ausprobieren, wenn es Sie nicht zu sehr stört. 

Können Sie mir erklären, was die Methode ist, um dieses Makro , das beim Öffnen einer Datei eine Aktion auslöst, mit diesem Makro zusammenzuführen, das eine Reihe von Makros ausführt?

Hier ist ein Makro, das in Ihrem Plan verwendet wird und den Pfad des Makros im 'HandlerModule' geändert hat

Es wird ein Objekt für Sie im Designbaum erstellt.

 

Normalerweise sollte es funktionieren, startet beim Öffnen der Datei (Plan/Teil oder asm)


macrotest2.swp
2 „Gefällt mir“

Großartig, DANKE Mandragore!

Außerdem ist die Bereitstellung für eine Reihe von Dokumenten sehr einfach.

Ich hatte ein bisschen mit den Referenzen zu kämpfen, aber es macht gute Fortschritte.

Ich habe noch einen kleinen Fehler: Das "exortPDF"-Makro namens pat the integrated macro stürzt bei der Wiederherstellung des Dateipfads ab, während es funktioniert, wenn ich es manuell ausführe.

Es scheint, dass es daran liegt, dass das Makro "exportPDF" gestartet wird, bevor die Volumenkörperdatei vollständig geladen ist (das Fehlerfenster bietet mir das Debuggen an, aber die Solidworks-Datei wird nicht angezeigt). Ist es möglich, eine Art Verzögerung zu setzen, um zu sehen, ob es das war?

Danke noch einmal

Ich hatte das gleiche Problem, es war unmöglich, ein externes Makro mit der Methode, die es bietet, zu starten, und ich hatte keine Zeit, mich mit dem Thema zu befassen.

 

Ich habe es gerade geschafft, einen Versuch damit zu starten:

Option Explizit
Dim swApp als SldWorks.SldWorks
Dim boolstatus als boolescher Wert
Sub main()
   Legen Sie swApp = Application.SldWorks fest
   Dim runMacroError So lange
   boolstatus = swApp.RunMacro2("Pfad", "Modul", "Name", 1, 0)
Ende Sub

 

Ich habe auch 'swRunMacroUnloadAfterRun' auf 1 und 'runMacroError' auf 0 geändert

[ Leider funktioniert es nicht mehr... Die Änderungen, die Sie vornehmen, wirken sich nur auf das handlermodule aus, aber im anderen Modul bleibt es hängen...] Fehler behoben

Ich habe den Inhalt des Handlermoduls durch das ersetzt, was Sie mir angeboten haben, es funktioniert immer noch nicht. Ich bekomme immer noch die Fehlermeldung an dem Makro, das vom andlermodule aufgerufen wird, während der Plan noch nicht in der SW angezeigt wird. Wenn das Makro versucht, einen Plan zu exportieren, der noch nicht geöffnet ist, ist dies nicht überraschend. Aber ich dachte, dass das handlermodule erst ausgelöst wurde, als der Plan vollständig geladen war...

Übrigens, ich verstehe nicht, was du meinst mit "Ich habe auch 'swRunMacroUnloadAfterRun' durch 1 und 'runMacroError' durch 0 ersetzt"