DXF/PDF-opname via macro

Hallo

Ik probeer momenteel de code te nemen van een macro die ik heb gevonden (http://www.lynkoa.com/forum/documents-commerciaux/ma-macro-pdf-dxf-quoi-en-dire). Het draaide op SW2013 (ik zit op SW2015). Ik geef aan dat ik niets weet over VBA, dus ik probeer mijn kennis om te zetten in andere talen om de problemen op te lossen.

Ik kreeg eerst de foutmelding Project of bibliotheek niet gevonden. Ik heb de code uit het originele bestand gekopieerd en weer in een nieuwe macro geplakt en het lijkt erop dat dit het probleem heeft opgelost.

Nu lijkt het erop dat mijn macro niet meer loopt zoals het zou moeten (nou ja, het loopt maar niet zoals ik zou willen). Ik voer het uit en het vertelt me dat het geen bestanden kan opslaan in DXF.

De wegen die ik overweeg:

-Macro detecteert niet dat SW2015 open is

-De macro vindt de MEP die momenteel open is niet (maar normaal gesproken zou hij me een foutmelding moeten laten zien)

 

PS: Ik heb geprobeerd een klein stukje code toe te voegen om te controleren of de doelmap bestaat. Het startte echter ook niet, ik zette het in de reacties en ik nam de originele code.

Bij voorbaat dank voor je hulp en ik begin VBA zelf te leren.

 

 


macro1.swp

Hallo

Wordt er een foutmelding gegeven?

Is het mogelijk om de code in een tekstbestand te zien? (Nog geen SolidWorks bij de hand).

Hallo

Hey@PL Ik heb de macro snel gekopieerd in txt-formaat;)

Ik weet er te weinig  van en het is het ultracomplexe gebied ben een beetje verdwaald @_ @


macro.txt
1 like

Dank you@Centor

@nuemishra: je hebt deze regel toegevoegd:

  'De volgende regels lijken niet te werken, ik heb de basiscode er weer bovenop gelegd. De code die wordt geverifieerd, moet afkomstig zijn van de hoofdfout

 

 

Ja, ik was degene die deze regel heeft toegevoegd. Maar ik weet waarom het niet werkt: ik was vergeten Dim fs As Scripting.FileSystemObject toe te voegen en te verwijzen naar Microsoft scripting runtime. Ik moet nog steeds mijn adres corrigeren (dat momenteel pad\nom_fichier.slddraw herstelt en niet alleen pad\), ik heb de oplossing, het is niet perfect, maar het werkt. Ik zal dat verbeteren als het gevalideerd is.

 

Het grootste probleem (degene die me ertoe bracht om te posten) is dat ik het programma kan uitvoeren in de stap-voor-stap modus van debuggen, maar niet door het uitvoeren van de macro. In de debug-modus lijkt alles te werken (behalve misschien het opslaan van de DXF, het crasht de debug, maar het maakt de bestanden goed).

Wat betreft de debug-crash op het DXF-record, wanneer ik op het niveau van de Dir = swModel.SaveAs4(CompleteDocName, 0, 0, 0, 0 statement ), freest de debug en stopt dan. Na controle lijkt het erop dat het de drie vellen van mijn test-MEP opslaat (het lijkt erop dat de functie de drie vellen tegelijk opslaat). Wanneer ik opnieuw opstart, wordt me gevraagd of ik het bestaande bestand wil overschrijven (en het vraagt me voor elke pagina)

Ik zet terug naar mijn gecorrigeerde macro in .txt

EDIT: Update van de macro1.txt

 


macro1.txt

Ik zou in de verleiding komen om te zeggen dat SolidWorks geen tijd heeft om zijn DWG te maken wanneer het wordt gevraagd om er nog een te maken. We moeten proberen pauzes in de code op te nemen:

Twee voorbeelden van een pauze:

1)

Toepassing.Wachttijd + TijdSerial(0, 0, 5)' pauze van 5 seconden

2)

Declareer Sub Sleep Lib "kernel32" aka "Sleep" (ByVal dwMilliseconds As Long)

 

Slaap 2000 ' pauze van 2 seconden

Verdomme, ik moet weer te slecht zijn.

Ik krijg twee verschillende foutmeldingen en het lukt me niet om ze op te lossen.

Voor de eerste pauzemethode vertelt het me: "Runtime-fout '438': eigenschap of methode wordt niet afgehandeld door dit object"

Voor de tweede methode vertelt het me: "Compilatiefout: de code in dit project moet worden bijgewerkt om te kunnen worden gebruikt op 64bit-systemen. Controleer en update de Declare-instructies en markeer ze vervolgens met een PtrSafe-attribuut"

Voor de eerste methode probeerde ik eerst rechtstreeks in de hoofdsub te testen (net onder AffectVar01), voor de tweede zette ik de Declare onder Public RepUtil (ik probeerde hem ook uit wanhoop in de hoofdsub te plaatsen... Wie weet, misschien begreep ik niets van VBA)

 

BEWERKEN:

Ik heb een pleister gevonden. Een sub die ik vond tijdens het zoeken op google, wachtend in een lus. Helaas lost dit het probleem niet op. Als ik normaal draai, blijft het me vertellen dat het geen DXF opslaat (trouwens, het slaat ook geen PDF's op, maar zoals je zei, het moet zijn omdat de macro te snel gaat voor het systeem). 

EINDELIJK!! Ik kwam terug omdat een collega voorstelde dat ik de macro met enorme pauzes zou uitvoeren en het werkte eindelijk!  Na een paar tests werkte het met 100 in elk tempo, het lukte me om het een keer te laten werken met 20 in de eerste en 5 in de tweede. Ik zal doorgaan met de tests om de minimale wachttijd te zien.

Een grote dank aan u!

 

EDIT²:Nou, ik sprak een beetje snel. Als ik het vanuit de macro-editor uitvoer, werkt het, als ik Tools=>Macro=>Run doe, werkt het niet meer. Aangezien ik dit moet koppelen aan Smart Properties, is het misschien geen probleem, ik zal kijken of het via Smart Properties werkt (in ieder geval gaat Tools=>Macro=>Run niet door de macro omdat ik meteen de melding krijg dat er niets is opgeslagen en dit, ondanks de 3 keer 20 seconden tempo)

 

Ten slotte, zelfs als SW weigert me de macro met de hand te laten starten, werkt het zonder problemen via Smart Properties.


macro1.txt
1 like

Dus als ik het goed begrijp, werkt de macro zoals je wilde, met slimme eigenschappen, en stap voor stap, maar niet door hem via het macromenu te starten?

Dat klopt. Als ik het start via het run-menu in Extra = > Macro, werkt het niet. Maar aangezien ik niet van plan ben het zo te gebruiken, is het niet erg. 

1 like