Automatischer Makro-Export beim Öffnen eines Clips

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"

Dieses Makro funktioniert für mich, aber in der Tat startet es nach dem Versuch das angeforderte Makro, bevor das Dokument in SolidWorks angezeigt wird, sodass das Makro gestartet werden muss, bevor das Dokument angezeigt wird, Sie müssen ein anderes Makro finden, um diese Art von Anfrage zu stellen.

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

 

Es dient nur dazu, das Lesen im Forum zu vereinfachen. Aber es ist dasselbe.

Meiner Meinung nach wäre die Lösung, das Dokument zu öffnen, die Vergangenheit zu lösen, neu zu erstellen und dann diese Art von Makro auszuführen

Aber konkret denke ich, dass es für solche Dinge einfacher wäre, nur in Excel zu arbeiten.


macrotest2.swp
1 „Gefällt mir“

Ich stimme voll und ganz zu , @mandragore diese Art von Makro sehr schnell zu einem Problem wird, weil es unmöglich ist zu wissen, ob es gestartet wird, wann es muss oder nicht, und keine Rückmeldung, ob es gut läuft oder ob es gerade gestartet und dann verbuggt wurde. Ein Makro aus einem Makro zu starten, das es bereits getan hat, ist nicht großartig.

Und da es sich um eine Makrofunktion handelt, ist es noch schlimmer und kann dazu führen, dass Sie Ihre Meinung schnell ändern, glauben Sie mir, es ist erlebt worden, ich war schon einmal dort, ich habe die 2 mit einem schnellen Rücklauf aufgrund vieler Probleme getestet.

 

 

Ziel ist es, diesen PDF-Plan automatisch aus einer Webplattform zu generieren. Per Definition wird es also vollautomatisch sein. Wenn ein Vorfall die Erstellung des PDFs verhindert, denke ich, dass ich auf einer anderen Ebene als SW benachrichtigt werden kann.

Es ist möglich, die API in C++ anzugreifen. Ich habe in diesem Forum kein Thema gefunden. Wissen Sie, wie gut es funktioniert?

Ich habe diesen Konversationsthread gefunden, der sich mit einem Code befasst, der es Ihnen ermöglicht, eine Aktion zu starten, sobald die Rekonstruktion des Plans abgeschlossen ist:

https://r1132100503382-eu1-3dswym.3dexperience.3ds.com/#community:yUw32GbYTEqKdgY7-jbZPg/iquestion:Fr2GDcHYThK6PjOZubrVPg

Es gibt eine Deklaration, die nicht erkannt wird und im Makro rot angezeigt wird:

Dim WithEvents swDraw As SldWorks.DrawingDoc 

Haben Sie eine Erklärung dafür? Abweichende VB-Version?  Fehlende Referenz?

Es ist möglich, die API in C++ anzugreifen. Ich habe in diesem Forum kein Thema gefunden. Wissen Sie, wie gut es funktioniert?

 

Ja, das ist möglich. Ich kenne den Code zwar nicht, aber Sie finden hier alles, was Sie suchen:  

http://help.solidworks.com/2022/English/api/sldworksapiprogguide/Welcome.htm

 

In den Foren verwenden wir fast nur die VBA, ich denke, es ist einfacher, sich mit dem Code vertraut zu machen und viele Leute sind Autodidakten.

Hallo ihr alle

Kleines Update zu meinem Thema:

Am Ende habe ich mit Batch+ gefunden, einem Tool, mit dem Sie Befehlszeilenmakros ausführen können, wonach ich gesucht habe.

Ich habe endlich eine .bat, die es mir ermöglicht, mein Makro "export-PDF.swp" zu starten, ohne SW berühren zu müssen, genau das, was ich brauchte.

Übrigens empfehle ich dringend, sich die Tools anzusehen, die sie anbieten. Es ist wahrscheinlich billiger als MyCad, mit etwas weniger Funktionen, aber auch etwas mehr.

Vielen Dank