Opnemen in STEP met een macro

Hoi allemaal

Ik heb momenteel een macro die een 3D-bestand opent met een familie van onderdelen, naar keuze van de gebruiker in een lijst, evenals de bijbehorende tekening.
In sommige gevallen hebben mijn collega's het bestand in STEP-formaat nodig, dus ik wend me tot u voor verduidelijking om deze bewerking met behulp van een macro uit te voeren. Dit is wat ik graag zou willen doen: 

- Bied de gebruiker de STEP-bestandsopname van het reeds geopende onderdeel aan via een "OptionButton",
- Als de knop is geselecteerd, wil ik het bestand in STEP opslaan onder een andere naam: STEP_"vooraf ingevoerde naam per gebruiker"
- In een ander bestand, bedoeld om alleen STEP op de server te hosten met een basispad C:\Users\.......\STEP\STEP_"naam eerder ingevoerd per gebruiker". STAP

Ik heb al gekeken door de macro recorder, maar ik krijg alleen: 

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
longstatus = Part.SaveAs3("C:\Users\cbr\Desktop\CAO W25\STEP\STEP.STEP", 0, 0)
End Sub

Maar lijkt dit mij vrij licht of is het echt "zo simpel"?

Ik wilde ook kijken met behulp van de macro van .PL : http://www.lynkoa.com/tutos/3d/macro-enregistrer-sous-avec-solidworks maar ik denk dat het te complex is voor mijn geval.

Dus ik zou graag willen weten of iemand me alsjeblieft kan helpen? 

Bedankt!

Hallo

Nogmaals, het staat allemaal in de API-help van SW: http://help.solidworks.com/2017/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldocextension~saveas.html

en om de exportopties op te geven: http://help.solidworks.com/2017/english/api/swconst/filesaveasstepoptions.htm

Fijne dag

4 likes

Dus ja, het is ook, maar nee, het zal niet voor jou zijn, want je zult in de maco cbr moeten vervangen door de gebruikersnaam die theoretisch anders is op elk bericht, het is het enige probleem dat ik zie, ah en zet ook een variabele voor de bestandsnaam :)

 

EDIT: a priori zou deze regel uw probleem van verschillende omgevingsvariabelen beantwoorden

MsgBox CreateObject("WScript.Shell").specialfolders("Desktop")

 

2 likes

Allereerst bedankt voor je antwoorden!

 remrem Ik stelde de vraag rechtstreeks op het forum omdat ik dacht dat ik sneller oplossingen zou vinden (wat het geval is). En vermijd de uitleg van de API (wat ook het geval is..) omdat ik de parameters Option en ExportData niet begrijp. Ik begrijp nog minder waarom bij de recorder deze syntaxis niet wordt gerespecteerd.

MaD, dit opnamepad is tijdelijk voor mijn tests, maar in werkelijkheid zal het een plaats op de server zijn, dus ik denk dat het dit probleem oplost. De variabele met de naam is al gemaakt en wordt :) gebruikt.
Ik zie niet echt wat deze regel doet? A quo icorrespond ("WScript.Shell") alstublieft?

1 like

SA stelt u in staat om een bepaald object te maken waarmee u systeemvariabelen kunt ophalen, we zijn zekerder van puur programmeren dan van de SW-macro

2 likes

Oké, bedankt voor je uitleg. 

Dus je denkt dat de regel code die door de recorder wordt gegeven voldoende is? Ik zal proberen.

Als het alleen voor een export in stap ja is, na zoals op de remrem-link  , kun je een optie forceren als je die nodig hebt

2 likes

Nogmaals, het hangt af van je doel.

Als u een eenvoudige save under en stap wilt doen. Dat gezegd hebbende, zie ik niet echt het nut in van het maken van een macro voor drie klikken ...

Als u de instellingen wilt forceren om er zeker van te zijn dat uw export zal zijn zoals u wilt en niet volgens de pc-instellingen, dan wordt alles uitgelegd in de help.

Probeer een stukje code te schrijven zoals uitgelegd en als je een probleem tegenkomt. Kom bij ons terug en we zullen proberen het je uit te leggen of te adviseren... ;-)

2 likes

Dat is precies mijn doel, nou ja, het is niet om 3 klikken te vermijden, maar het is om altijd dezelfde mapnaam, bestandsnaam en hetzelfde recordpad te hebben.

Dus ik heb de gemakkelijke oplossing geprobeerd en het werkt in het ene geval, maar niet in het andere:
 

'Pour l'enregistrement en fichier STEP
                         If Check_step.Value = True Then
                            EnregistrementSTEP = Part.SaveAs3("C:\Users\cbr\Desktop\CAO W25\STEP\STEP_" & ActiveConfiguration & ".STEP", 0, 0)
                            MsgBox "Le fichier STEP a été enregistré dans le dossier suivant : C:\Users\cbr\Desktop\CAO W25\STEP" & Chr(10) & "Sous le nom suivant : STEP_" & ActiveConfiguration, vbInformation, "Emplacement du fichier"
                         End If

Ik heb exact dezelfde code. In het ene geval werkt het en in het andere geval krijg ik de foutmelding "Run-time error '91'" maar ik zie niet wat er mis is. Waarschijnlijk een ongedefinieerd element, maar ik zie het niet.

Hallo

Ik ben er net achter gekomen dat de SaveAs3 methode in 2017 achterhaald is. We moeten nu het volgende gebruiken: http://help.solidworks.com/2017/english/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.IModelDocExtension~SaveAs.html

Au! Ik zal een deel van mijn aanvraag in VB.net moeten beoordelen....

Edit: Let op deze paragraaf:

"Om op te slaan als een IGES-, STL- of STEP-bestand, moet het document dat moet worden geconverteerd het actieve document zijn. Voordat u deze methode aanroept:

  1. Roep ISldWorks::ActivateDoc3 aan om het document te maken om het actieve document te converteren.
  2. Roep ISldWorks::ActiveDoc aan om het actieve document op te halen."

Verdomme, het is waar dat de code verandert volgens de versie van SW ...
Ik ben in 2015, dus SaveAs3 werkt thuis, maar SaveAs werkt niet...
Ja, dank je, dat is wat ik merkte na het plaatsen van mijn reactie.

Is er een manier waarop een bestaande tabel, waardoor u "verouderde methoden" kunt kennen? Want zonder dat zal het me problemen bezorgen.

Om dit te doen, kunt u in de help de doelversie wijzigen met behulp van het vervolgkeuzemenu rechtsboven.

Voorbeeld: Als ik overstap naar 2015, is SaveAs3 nog steeds afgeschaft. Als ik het in 2010 probeer, is het niet beschikbaar.

1 like

Goedenavond

Uh, de verouderde functies zijn niet meer bruikbaar. Ik gebruik nog steeds vba-macro's in SaveAs2 op SW2016 en het werkt erg goed (voor exports in step, stl, iges, pdf)

2 likes

Hoi Cyril.f

Dank u voor uw verduidelijking. Ik ga hier dieper op in om te zien waar het probleem vandaan komt.

Het al dan niet beschikbaar zijn van sommige SW-functies is afhankelijk van de dll waarnaar wordt verwezen.

Uit het geheugen maakt VBA geen kopie van de DLL's waarnaar wordt verwezen, maar gebruikt het de beschikbare. Het kan gebeuren dat sommige functies in recente DLL's zijn verwijderd.

Dassault neemt niet de moeite om zijn dlls te repareren, het voegt functies, parameters en procedures toe als dat nodig is. 

Dit heeft ten minste één voordeel, namelijk dat u achterwaarts compatibele macro's kunt schrijven, maar ook compatibel bent met latere versies, maar met verlies van bepaalde functies.

2 likes