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"?
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
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
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?
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
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... ;-)
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.
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:
Roep ISldWorks::ActivateDoc3 aan om het document te maken om het actieve document te converteren.
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.
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)
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.