Automatische macro-export wanneer een fragment wordt geopend

Hallo

Ik wil een macro maken om een plan automatisch te exporteren naar PDF en JPEG zodra het wordt geopend en vervolgens weer te sluiten.

Ik weet dat deze functie misschien vreemd lijkt, maar ik heb mijn redenen, en de uitleg zal lang zijn ...

Ik vond deze Macor als voorbeeld, die stukjes lijkt te bevatten van wat ik zoek:

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

In dit voorbeeld wordt een "log"-tekstbestand ingevuld telkens wanneer het bestand waarin de macro wordt herhaald, wordt geopend.

Zoals altijd begrijp ik er niet veel van, maar ik probeer te ontcijferen om vooruitgang te boeken.

De macro bestaat uit twee modules: Macro en HandlerModule. Ik dacht dat je met de ene de macro bij het opstarten kon rijgen en met de andere de uit te voeren taak bestond, maar bij het lezen van de code weet ik het niet echt meer zeker. Ik heb wel een macro waarmee je kunt exporteren in PDF of / en JPEG, maar ik weet niet zeker of het plakken in de HandlerModule de juiste procedure is.

Een ander punt dat mij stoort, en dat misschien ook in je ogen heeft geprikt, is het automatisch sluiten van het document na export. Als ik op de normale manier aan mijn document wil werken, zal er een probleem zijn: ik open, en bam, het sluit. Als ik mijn macro niet in het document insluit, zou ik me moeten kunnen misleiden door de macro tijdelijk naar een andere map te verplaatsen. Maar is er een andere manier?

Tot slot, en zelfs als het erg secundair is, is het mogelijk om folio "1" in PDF en folio "2" in JPEG te exporteren?

Bedankt voor je hulp

Hallo

Allereerst zal ik geen functiemacro's gebruiken, maar eerder Solidworks event management (detectie van het openen van een bestand en vervolgens verwerking door de macro).

Hiervoor moet het uitvoerbare bestand voor het starten van SW worden gewijzigd om een macro toe te voegen die in het geheugen moet worden geladen wanneer SW wordt geopend.

Voor de enigszins onverenigbare kant van automatisch willen werken en exporteren, afgezien van het openen van een venster (msgbox) waarmee je kunt selecteren wat je wilt doen, zie ik niet al te veel van een oplossing.

Gebruik anders de SW-taakplanner om deze batchexports uit te voeren.

Voor de laatste vraag, ja het is mogelijk, je moet er gewoon aan de ene kant zeker van zijn dat er maar 2 folio's zijn, anders moet je extra bewerkingen doen om te weten naar welk bestandsformaat je moet exporteren.

1 like

De functiemacro sluit de macro (als een functie) in uw assembly in, zodat de code telkens opnieuw wordt opgestart wanneer het bestand wordt geopend. Dus elke keer dat u het bestand opent, wordt de macro gestart en worden de bestanden naar u geëxporteerd in pdf en jpg.

Ik weet niet zeker of dit is wat je zoekt.

Als u alleen batchverwerking wilt doen uit een lijst met bestanden, is dit duidelijk niet de macro voor u.

In dit geval is dit type programma of macro meer geschikt voor uw verzoek:

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/

Er was ook een programma dat goed werkte, maar ik kan het niet meer vinden waarmee je je eigen macro kon starten.

Van mijn kant gebruik ik Integration (een MycadTools-tool van Visiativ - https://help.visiativ.com/mycadtools/2020/fr/Integration.html)

 

@ Cyril.f:

het wijzigen van het uitvoerbare bestand voor de SW-lancering  lijkt me een beetje te opdringerig voor mijn domme niveau

het gebruik van SW's taakplanner voldoet niet aan mijn behoeften: de export moet worden gedaan zonder Solidworks aan te raken. In dit geval klikt een gemiddeld persoon (of zelfs een computerprogramma) op een knop (een .bat) en haalt de PDF op uit een bepaalde map.

@ Sbadenis:

De functiemacro sluit de macro (als een functie) in uw assembly in, zodat de code telkens opnieuw wordt opgestart wanneer het bestand wordt geopend. Dus elke keer dat u het bestand opent, wordt de macro gestart en worden de bestanden naar u geëxporteerd in pdf en jpg. Ik weet niet zeker of dit is wat je zoekt.

Ja, precies!

Hallo

De wijziging van het uitvoerbare bestand is niet erg opdringerig, het zijn gewoon extra opdrachtparameters op de snelkoppelingen, zoals: 

"C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\SLDWORKS.EXE" /m "C:\Mijn macro's\Macro1.swb"

De macro start dus zodra deze wordt geopend.

Voor de functiemacro voldoet het inderdaad aan uw behoeften, maar niet aan de noodzaak om aan de bestanden te kunnen werken, omdat het bestand systematisch wordt geëxporteerd en vervolgens wordt gesloten. Kortom, je bestand wordt naar mijn mening totaal onbruikbaar, tenzij je elke keer een validatievenster toevoegt om te weten wat je moet doen (het bestand sluiten of open laten).

Wat betreft de taakplanner, ik begrijp het niet echt. In ieder geval moet SW openen om de tekening te openen en te exporteren. Er wordt niets op de achtergrond gedaan zonder ooit de hoofdsoftware te openen.

1 like

Helemaal eens met @Cyril.f  , tenzij je het onderdeel of de assemblage nooit meer gebruikt, is het onmogelijk om een macrofunctie te maken.

Wat is het doel van het van tijd tot tijd verkrijgen van de pdf en jpg van een gedefinieerde onderdelenset of assemblage?

Zo ja, waaruit een bestandenlijst of een 3D-assemblage met het te extraheren onderdeel of assemblagebestand te extraheren?

Zonder je hele proces te beantwoorden, lijken deze vragen essentieel om een correct antwoord te geven.

 

Dank je wel Cyril.f . Ik begreep net dat het "uitvoerbare bestand starten" slechts het .bat is dat het openen van mijn bestand beveelt...

Ik schreef dit:

start "C:\Program Files\SLDWORKS.exe" "C:\Plan1.SLDDRW" /m "C:\Export PDF.swp"

Het bestand Plan1.SLDDRW wordt goed geopend, maar de macro wordt niet gestart. Ik denk dat dit komt omdat er geen standaard-app is ingesteld voor .swp-bestanden

Ik heb geprobeerd swvbaserver.exe en drawcompare.exe als standaardapp toe te passen, maar zonder succes.

Hallo

Ik denk niet dat het afkomstig is van een applicatie die niet is gedefinieerd voor swp-bestanden, maar eerder is gekoppeld aan de macro die geen "automatische" uitvoering heeft. Een beetje zoals Word/Excel-macro's, is er een uitvoering nodig op het moment van het openingsevenement om daarna acties te activeren.

Hallo

 

 @Legnano

Een ander punt dat mij stoort, en dat misschien ook in je ogen heeft geprikt, is het automatisch sluiten van het document na export. Als ik op de normale manier aan mijn document wil werken, zal er een probleem zijn: ik open, en bam, het sluit. Als ik mijn macro niet in het document insluit, zou ik me moeten kunnen misleiden door de macro tijdelijk naar een andere map te verplaatsen. Maar is er een andere manier?

 

Zoals je misschien al geraden hebt, is het problematisch om dit soort macro's te maken. Het beste is naar mijn mening om een macroknop te maken waarmee je je document in PDF/JPEG in de mappen van je keuze kunt opslaan en de tekening kunt sluiten. 

U kunt ook een macro maken die de tekening opent van het document dat u in uw boomstructuur hebt geselecteerd, opgeslagen en de tekening hebt gesloten.

 

Je moet ook voorzichtig zijn, want bij het openen van sommige tekeningen worden de documenten lichter en daardoor is de 'kamerbubbel' onzichtbaar (dit is een van mijn tekenproblemen en ik ben op zoek naar macro-actie om de weergave op te lossen)

 

Persoonlijk gebruik ik geen uitvoerbaar startbestand , ik vind het een beetje te opdringerig, zelfs als de applicatie op sommige van mijn macro's nuttig zou kunnen zijn, maar ze zijn alleen nuttig op oude bestanden en ik denk dat ik dit soort macro's niet kan opnemen in bestaande bestanden .

Terug naar het startpunt/ volgens al uw opmerkingen, wat het beste bij mij past, is een macro A geïntegreerd in het plan die vraagt wanneer het plan wordt geopend om een macro B uit te voeren die aanwezig is in een directory. Deze macro B zou moeten vragen:

1: Het plan en de componenten in Solved laden

2: Exporteer het plan

3: Het plan sluiten zonder te sparen

Als ik normaal aan het plan wil werken, verwijder ik macro B uit de map, die de vorige acties blokkeert. Ik behandel de foutmelding "macro B niet gevonden" handmatig omdat het een uitzonderlijk speciaal geval is.

Voor degenen die mijn verzoek vreemd vinden, wil ik uitleggen waarom, maar ik wil niet dat dit gesprek een slagveld wordt om me te vertellen of ze het een goed of slecht idee vinden. Ik heb een Excel-bestand dat de aangepaste eigenschappen van een kamer wijzigt zonder deze te hoeven openen. De geometrie van het onderdeel wordt bijgewerkt met de waarden van de Excel. Een simpele klik op de knop zou de publicatie van een plattegrond van de kamer in pdf mogelijk moeten maken. Dit alles zodat de gebruiker geen gebruik hoeft te maken van solidworks.

Omhoog...

Waarom niet alle code van Excel doen in dit geval?

Je kunt inderdaad SW vanuit Excel besturen (zelfs als ik het nog nooit persoonlijk heb geprobeerd)

Zie dit onderwerp en meer specifiek CONTROLLING Solidworks in een Excel-macro:

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

EDIT: een ander forum onderwerp over hoe het te doen vanuit Excel: https://www.lynkoa.com/forum/solidworks/macro-solidworks-excel

Bedankt, maar het zal niet geschikt zijn voor mijn toepassing.
Ik zal blijven werken aan de geïntegreerde macro-oplossing die vraagt om het openen van andere macro's. Op dit moment is het schaatsen

Toch zegt u:

Voor degenen die mijn verzoek vreemd vinden, wil ik uitleggen waarom, maar ik wil niet dat dit gesprek een slagveld wordt om me te vertellen of ze het een goed of slecht idee vinden. Ik heb een Excel-bestand dat de aangepaste eigenschappen van een kamer wijzigt zonder deze te hoeven openen. De geometrie van het onderdeel wordt bijgewerkt met de waarden van de Excel. Een simpele klik op de knop zou de publicatie van een plattegrond van de kamer in pdf mogelijk moeten maken. Dit alles zodat de gebruiker geen gebruik hoeft te maken van solidworks.

Het zou dus voldoende zijn om op uw Excel-knop de opening van uw onderdeel en uw plan in solidworks te programmeren, om uw folioplan 1 in pdf en uw folioplan 2 in jpeg te exporteren. Sluit vervolgens het onderdeel en de assemblage. Dit alles tijdens het coderen in Excel.

Hier is een stukje code dat vanuit Excel een kamer en een MEP opent, ik heb het net uit nieuwsgierigheid getest en het werkt perfect.

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

Bedankt @d.roger voor deze code die elders in mijn link hierboven beschikbaar is.

Dan hoef je de pdf en de jpeg niet meer te exporteren. Dat is grotendeels haalbaar en zou vrij eenvoudig moeten zijn.

Tenzij ik natuurlijk nog een punt mis?

Ter informatie: de ingebouwde macro's om er verschillende te hebben getest, zijn ingewikkeld om te implementeren en blijven gevaarlijk, om nog maar te zwijgen van de crashes ermee.

 

1 like

Ik ben van dezelfde mening dat @sbadenis macro die in het plan/de kamer is verwerkt, ik nooit heb geoefend, maar het lijkt mij dat het vrij complex is en ik vind het te 'opdringerig'. 

Aangezien je uitgaat van een excel bestand waar je de aan te passen afmetingen invult denk ik dat de simpelste een excel macro knop blijft die werkt op Solidworks.

 

Met de knop kunt u de kamer openen, de afmetingen invullen, het opgeslagen plan openen en vervolgens sluiten, of doorgaan met werken door de afmetingen te wijzigen en vervolgens opnieuw op te slaan als u een bijzettafel heeft, wat u een paar seconden kan besparen elke keer dat u opent / sluit.

 

Als je wilt voorkomen dat je gebruikers Solidworks gebruiken, denk ik dat dit de beste oplossing is. Je kunt snel geïrriteerd raken als je een plan moet wijzigen en je bent vergeten de macro te verplaatsen, of als Solidworks elke keer dat je een plan wijzigt/maakt een venster voor je opent met de mededeling dat het de macro niet heeft gevonden zonder de mogelijke fouten/bugs van Solidworks te vermelden.

 

Anders, als ik uw verzoek goed begrijp, wilt u dat de gebruiker op het DRWG-bestand van het onderdeel in Windows Verkenner klikt. Solidworks opent dit plan , correleert met het geopende Excel-bestand , werkt de gegevens bij en bewaart/sluit het plan vervolgens automatisch zonder dat de gebruiker het ziet.

1 like

Ik zou toch graag de ingebouwde macro willen proberen, als je er niet te veel last van hebt. 

Kun je me uitleggen wat de methode is om deze macro die een actie start bij het openen van een bestand, samen te voegen met deze macro die een reeks macro's uitvoert?

Hier is een macro die op uw plan is gebruikt en het pad van de macro in de 'HandlerModule' heeft gewijzigd

Het zal een object voor u maken in de ontwerpboom.

 

Normaal gesproken zou het moeten werken, starten bij het openen van het bestand (plan/deel of asm)


macrotest2.swp
2 likes

Geweldig, BEDANKT Mandragore!

Bovendien is het supereenvoudig te implementeren op een reeks documenten.

Ik worstelde een beetje met de referenties om te activeren, maar het vordert goed.

Ik heb nog steeds een kleine bug: de "exortPDF" macro genaamd pat de geïntegreerde macro crasht bij het herstel van het bestandspad, terwijl als ik het handmatig uitvoer, het werkt.

Het lijkt erop dat het komt omdat de "exportPDF" macro start voordat het vaste bestand volledig is geladen (het foutvenster biedt me de foutopsporing, maar het solidworks-bestand verschijnt niet) Is het mogelijk om een soort vertraging in te stellen om te zien of dat het is?

Nogmaals bedankt

Ik had hetzelfde probleem, onmogelijk om een externe macro te starten met de methode die het biedt en ik had geen tijd om in het onderwerp te duiken.

 

Ik ben er net in geslaagd om een poging te lanceren met dit:

Optie Expliciete
Dim swApp als SldWorks.SldWorks
Dim boolstatus als Booleaanse
Sub hoofd()
   Stel swApp = Toepassing.SldWorks in
   Dim runMacroError zo lang
   boolstatus = swApp.RunMacro2("pad", "module", "naam", 1, 0)
Einde Sub

 

Ik heb ook 'swRunMacroUnloadAfterRun' veranderd in 1 en 'runMacroError' in 0

[ Helaas, het werkt niet meer... De wijzigingen die je aanbrengt hebben alleen invloed op de handlermodule, maar het is in de andere module dat deze vastloopt...] Fout opgelost

Ik heb de inhoud van de handlermodul vervangen door wat je me aanbood, het werkt nog steeds niet. Ik krijg nog steeds de foutmelding bij de macro die door de andlermodule wordt aangeroepen terwijl het plan nog niet in SW wordt weergegeven. Als de macro een plan probeert te exporteren dat nog niet open is, is dat niet verwonderlijk. Maar ik dacht dat de handlermodule pas getriggerd werd als het plan helemaal geladen was...

Trouwens, ik begrijp niet wat je bedoelt met "Ik heb ook 'swRunMacroUnloadAfterRun' vervangen door 1 en 'runMacroError' door 0"