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.
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.
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.
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
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.rogervoor 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.
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.
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?
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?
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"
Deze macro werkt voor mij, maar inderdaad, na het proberen start het de gevraagde macro voordat het document wordt weergegeven in SolidWorks, dus de macro moet worden gestart voordat het document wordt weergegeven, je moet een andere macro vinden om dit soort verzoeken te doen.
Trouwens, ik begrijp niet wat je bedoelt met "Ik heb ook 'swRunMacroUnloadAfterRun' vervangen door 1 en 'runMacroError' door 0"
Het is gewoon om het lezen op het forum te vereenvoudigen. Maar het is hetzelfde.
Naar mijn mening zou de oplossing zijn om het document te openen, het verleden op te lossen, opnieuw op te bouwen en vervolgens dit soort macro's uit te voeren
Maar concreet denk ik dat het makkelijker zou zijn om voor dit soort dingen alleen in Excel te werken.
Helemaal eens met @mandragoredit soort macro wordt heel snel een probleem, omdat het onmogelijk is om te weten of het wordt gelanceerd wanneer het nodig is of niet, en geen feedback of het goed loopt of dat het net is begonnen en vervolgens is afgeluisterd. Een macro starten vanuit een macro om het al te hebben gedaan is niet geweldig.
En sinds een macrofunctie is het nog erger en kan het je snel van gedachten doen veranderen, geloof me, het is ervaren, ik ben er eerder geweest, ik heb de 2 getest met een snelle terugspoeling vanwege veel problemen.
Het doel is om dit PDF-plan automatisch te genereren vanuit een webplatform. Het zal dus per definitie volledig automatisch gaan. als een incident het maken van de PDF verhindert, denk ik dat ik op een ander niveau dan SW kan worden gewaarschuwd.
Het is mogelijk om de API in C++ aan te vallen. Ik heb geen onderwerp gevonden op dit forum. Weet je hoe goed het werkt?
Uiteindelijk vond ik wat ik zocht met Batch+, een tool waarmee je command-line-macro's kunt uitvoeren.
Ik heb eindelijk een .bat waarmee ik mijn "export-PDF.swp" macro kan starten zonder SW aan te raken, precies wat ik nodig had.
Trouwens, ik raad ten zeerste aan om naar de tools te kijken die ze aanbieden. Het is waarschijnlijk goedkoper dan MyCad, met wat minder functies, maar ook wat meer.