Hallo
Met de gebruikte macro moet je de exportopties van de dxf/dwg-formaten wijzigen in de solidworks-opties:

Vriendelijke groeten
Hallo
Met de gebruikte macro moet je de exportopties van de dxf/dwg-formaten wijzigen in de solidworks-opties:

Vriendelijke groeten
Hallo
Het resultaat is hetzelfde, ik heb nog steeds 4 bestanden op de leugen van 2
In tegenstelling tot PDF's
Hallo
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).
SW had geen rekening gehouden met de instelling "Exporteer alle vellen naar een bestand"
Ik heb wel 2 bestanden met de juiste syntaxis , maar het is hetzelfde blad in de 2, degene die "actief" is op het scherm.
Als we naar de macro kijken, zijn er verschillende keren "swExpPdfData" en "SldWorks.ExportPdfData"
en een regel outFile = outFile & IIf(INCLUDE_DRAWING_NAME, drawName & "_", "") & sheetName & ".dxf" of het is ".pdf" in de PDF-macro die werkt
Is het de ..... ExpPdfData die moet worden vervangen door het equivalent voor DXF's?
Oeps, ik kijk in meer detail, ik heb de bestanden niet geopend.
Re
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
Bedankt
Het werkt perfect ;-)
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
Hallo @Emmanuel_SERVEL en welkom.
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...
Vriendelijke groeten.
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
Hallo
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)
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
.
Hallo, ik ben het weer over dit onderwerp.
Beginnend bij de eerste MACRO en op zoek naar andere macro's op het forum, had ik deze aangepast om de index en de datum aan het einde van elk gegenereerd DXF-bestand te integreren.
Bijgevoegd is het bestand van mijn macro:
EXPORT_DXF_IND-DATE.swp (49,5 KB)
Ik heb twee zorgen:
Het bestand werkt, het verwachte resultaat is goed, maar aan de andere kant is de productietijd extreem lang. Omdat ik niets van VBA weet, heb ik duidelijk hier en daar stukjes macro genomen om mijn doelen te bereiken, ik weet niet waar het vandaan kan komen. Ik heb planbestanden met soms meer dan 100 bladen, de macro moet 20 minuten duren om alle bladen in DXF te genereren.
En het andere punt is dat ik het paginanummer aan het begin van elke bestandsnaam wil toevoegen, maar ik weet niet zeker welke variabele ik moet aanroepen.
Bedankt voor je feedback
Met vriendelijke groeten
Manu
Hallo;
Het was beter geweest om een nieuwe discussie te openen dan een oude te herstarten die al " Opgelost " was...
Is het mogelijk om je code hier direct te bewerken (zonder de </> tags te vergeten)...
Ik ben nooit erg enthousiast om een macro direct te downloaden... en gezien wat er voor het ontwerp wordt beschreven ... Ik ben nog minder geneigd om te downloaden ![]()
Hallo,
Bedankt voor de feedback, sorry dat ik geen forumgebruiker ben, ik weet niet welke regels ik moet volgen. ![]()
Hieronder volgt mijn macro:
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swCustProp As CustomPropertyManager
Dim valOut1 As String
Dim resolvedValOut1 As String
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
' On récupère la date du jour et on la met dans un format pouvant se mettre dans le nom d'un fichier
Dim dateNow As String
dateNow = Replace(Date, "/", ".")
' On récupère les valeurs qui nous intéresse dans les propriétés personnalisées du plan
Set swCustProp = swModel.Extension.CustomPropertyManager("")
swCustProp.Get2 "Révision", valOut1, resolvedValOut1
sPathname = Replace(swModel.GetPathName, ".SLDDRW", "")
vSheetName = swDraw.GetSheetNames
For i = 0 To UBound(vSheetName)
bRet = swDraw.ActivateSheet(vSheetName(i))
bRet = swModel.SaveAs4(sPathname & " - " & resolvedValOut1 & " - " & dateNow & "_" & 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
Hoe dan ook, ik dank jullie allemaal hartelijk. ![]()
Manu
Hallo;
Over het algemeen zie ik niet veel inconsistenties in de code, om te zien wat meer professionals dan ik erover
zeggen.
Ik zou gewoon een variabele voor de eigenschap " Revisie " hebben gebruikt
Stijl:
Dim MyRevision as string
dan
MyRevision = swCustProp.Get2 "Révision", valOut1, resolvedValOut1
En om het paginanummer toe te voegen, waarom niet (i+1) gebruiken?
Dit geeft het volgende:
bRet = swModel.SaveAs4(sPathname & " - " & MyRevision & " - " & dateNow & "_" & vSheetName(i) & i+1 & ".dxf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, nErrors, nWarnings)
Ook ben ik geen grote fan van het gebruik van " ." stippen in de bestandsnaam,
Dus (maar het is optioneel): dateNow = Vervangen(Datum, " / ", " _ ")
En tot slot voeg ik een vinkje toe om te controleren of MyRevision niet " Leeg" is:
If MyRevision ="" then
msgbox ("La propriété Révision n’existe pas.")
exit sub
end if
Om wat tijd te besparen, is het mogelijk om grafische updates van Solidworks tijdens de verwerking uit te schakelen:
swModel.FeatureManager.EnableFeatureTree = False 'Désactivation de la mise à jour treeManager
modView.EnableGraphicsUpdate = False 'Désactivation de la mise à jour graphique
EnableFeatureTreeWindow = False 'Désactivation de la mise à jour de la fenetre
Maar ze moeten aan het einde van de behandeling opnieuw worden geactiveerd:
swModel.FeatureManager.EnableFeatureTree = True 'Activation de la mise à jour treeManager
modView.EnableGraphicsUpdate = True 'Activation de la mise à jour graphique
EnableFeatureTreeWindow = True 'Activation de la mise à jour de la fenetre
Hallo,
Het hangt allemaal af van de " zwaarte" van elk blad.
Het is mogelijk dat SW op dit niveau hapert (ik heb ongeveer hetzelfde gedrag bij sommige macro's die alleen een eenvoudige PDF-export uitvoeren)
Tegelijkertijd meer dan 100 vellen, helemaal niet verbaasd dat het achterloopt!
En dit versterkt mijn manier van doen:
1 stuk = één bestand = 1 plan, daarna assemblage (behalve bij meerlichaams buisgelaste constructie)
Oké, bedankt voor je feedback.
Ik probeer dit aan te passen en ik probeer mijn volgende generatie DXF.
Ter informatie: ik werk in gelaste constructie voor meubelmodellering, dus afhankelijk van het meubilair kunnen er veel onderdelen zijn om te plannen. En ik word gevraagd zoveel mogelijk bladeren te zuiveren, dus veel bladeren voor één en hetzelfde stuk.
Hoe dan ook, ik dank jullie allemaal heel erg voor de tijd die jullie hebben genomen om mij te antwoorden.