Ik weet niets van macro's en ik zou graag willen weten of het mogelijk is om een DXF-exportmacro te maken die alle vellen van een tekening in aparte bestanden exporteert met behoud van de namen van de vellen.
Na het zoeken op het forum vond ik dit onderwerp met de macro bijgevoegd, dat is wat ik in principe zoek, alleen doet het PDF's en niet DXF's:
Kan een goede ziel van het forum deze macro voor mij wijzigen om de PDF te vervangen door de DXF. Behoudt de macro de SolidWorks-opties voor "opslaan als" die ik gebruik wanneer ik dit handmatig doe, zoals het gebruik van een projectiebestand?
Ik weet niet zeker of ik het vorige bericht begrijp.
Is dit de PDF-macro gedaan en de DXF-macro zou moeten doen die we moeten begrijpen?
Ik heb de macro niet geopend, maar als er gewoon een wijziging van de bestandsextensie op de hele code was, wordt deze logischerwijs alleen in een ander formaat opgeslagen.
De macro "pdf_page_par_page.swp" maakt 1 bestand per tekenblad aan en bevat in de PDF-bestandsnaam de naam van het tekeningbestand + de naam van het blad
Als het tekeningbestand bijvoorbeeld "TOTO" heet en 2 vellen heeft, "PLAN" en "Rep A", doet de PDF-macro het volgende:
1 "TOTO_PLAN" bestand met alleen het "PLAN" blad
1 "TOTO_Rep A" bestand met alleen het "Rep A" blad
Van mijn kant ben ik ingesteld op "Exporteer alle bladen in een bestand" en ik heb geen probleem.
Alleen als de instelling "Exporteer alle bladen in afzonderlijke bestanden" is, genereert de export 4 bestanden.
Wat me ook is opgevallen, is dat je de wijziging van instellingen twee keer moet forceren om er correct rekening mee te houden (waarschijnlijk SW2020-bug).
Normaal gesproken voldoet de onderstaande code aan de behoefte
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim sPathname As String
Dim vSheetName As Variant
Dim nErrors As Long
Dim nWarnings As Long
Dim i As Long
Dim bRet As Boolean
Dim lParam As Long
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
lParam = swApp.GetUserPreferenceIntegerValue(swDxfMultiSheetOption)
'Changement paramétrage export dxf si différent de feuille active
If lParam <> 0 Then
bRet = swApp.SetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swDxfMultiSheetOption, swDxfMultisheet_e.swDxfActiveSheetOnly)
End If
sPathname = swModel.GetPathName
sPathname = Left(sPathname, Len(sPathname) - 7)
vSheetName = swDraw.GetSheetNames
For i = 0 To UBound(vSheetName)
bRet = swDraw.ActivateSheet(vSheetName(i))
bRet = swModel.SaveAs4(sPathname & "_" & vSheetName(i) & ".dxf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, nErrors, nWarnings)
Next i
' Retour à la Feuille 1
bRet = swDraw.ActivateSheet(vSheetName(0))
' Remise en place du paramétrage initial
bRet = swApp.SetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swDxfMultiSheetOption, lParam)
End Sub
Hallo Sorry dat ik het onderwerp afstof, maar ik heb deze macro op SW2025 geprobeerd en het werkt niet. Dit is precies wat ik ook wil doen, ik teken onderdelen met meerdere gelaste carrosserieën. Hartelijk dank Manu
Om u te kunnen helpen, hebben we meer informatie nodig:
U zegt dat de macro niet werkt onder Sw2025, wat en de foutmelding? Is uw versie van Solidworks een lokale of 3Dexperience-versie? Heb je erover nagedacht om Solidworks References in je VBA-editor te laden?
Notitie: De functie " SaveAs4 " wordt als afgeschaft beschouwd in de Solidworks API Help. vreemd genoeg is het vervangen door " SaveAs3 " En hun uitspraken zijn iets anders: waarde = instantie. SaveAs4(Naam, Versie, Opties, Fouten, Waarschuwingen) en waarde = instantie. SaveAs3(Naam, Versie, Opties, ExportData, AdvancedSaveAsOptions, Fouten, Waarschuwingen)
Dat gezegd hebbende, een " verouderde " functie is niet noodzakelijkerwijs onbruikbaar...
Maar hier vallen we een onderwerp aan dat afhangt van je niveau in VBA-programmering. In jouw geval denk ik meer aan de VBA-referenties om toe te voegen...
Hallo Bedankt voor je feedback, toen ik de referenties ging controleren, waren de SW-vakjes al aangevinkt. Ik heb zojuist Microsoft Scripting Runtime toegevoegd, de macro opnieuw uitgevoerd om te proberen en het lijkt perfect te werken. Ik weet niet of dat het probleem was, maar ik ben in ieder geval tevreden. Hartelijk dank Manu
Het is niet vreemd vervangen door SaveAs3, het is gewoon niet op dezelfde methoden, SaveAs4 maakt deel uit van de ModelDoc2- en SaveAs3-methoden van ModelDocExtension. In antwoord @Emmanuel_SERVEL is de Microsoft Scripting Runtime-referentie normaal gesproken niet nodig voor het codefragment dat ik heb gegeven. De bug kan komen van de linkerfunctie die soms niet wordt herkend, je moet VBA als vervanging gebruiken. Links.
Dank u @Cyril_f ... Verrijking van mijn persoonlijke cultuur: (en er is niet eens sarcasme)
ModelDoc2 : Vertegenwoordigt het hoofddocument in SolidWorks (onderdeel, assemblage of tekening)
Geeft toegang tot basisbewerkingen op het document: openen, opslaan, opnieuw opbouwen, documenttype ophalen, configuraties openen, weergaven beheren, enz Dus => ModelDoc2:p alle basisbewerkingen op het SolidWorks* document.
ModelDocExtensie :
Is een uitbreiding van ModelDoc2, toegankelijk via de eigenschap .Extension van een ModelDoc2*-object.
Is gemaakt om extra methoden en eigenschappen toe te voegen wanneer ModelDoc2 de capaciteitslimiet bereikte in termen van het aantal methoden.
Biedt toegang tot geavanceerde of minder gebruikelijke functies, zoals: aangepast eigenschappenbeheer, berekeningen van massa-eigenschappen, tabelbeheer van stuklijsten (BOM), conversiebewerkingen, geavanceerd recordbeheer (bijv. SaveAs2) Dus: ModelDocExtension :p geavanceerde of gespecialiseerde bewerkingen die niet direct beschikbaar zijn in ModelDoc2, toegankelijk via de eigenschap .Extension van een ModelDoc2 object
Samenvattend vormt ModelDocExtension een aanvulling op ModelDoc2 en biedt het toegang tot extra functionaliteit die nodig is voor macro's of geavanceerde automatiseringen in SolidWorks