PDF/DWG-STEP-macrocode bewerken

Hoi allemaal

Ik gebruik een eenvoudige macro om mijn tekeningen op te slaan in PDF/DWG die ik van internet heb gehaald. Ik zou het willen laten evolueren op 2 punten:

  • Bewaar PDF's in een PDF-submap en hetzelfde voor DWG's, in mijn tekenmap
  • Ik wil graag het deel van mijn tekening kunnen openen en STEP kunnen maken dat wordt opgeslagen in een submap van mijn onderdelenmap.

Ik ben nieuw op SW macro's en ik ben een beetje verloren, als iemand me kan helpen

Hier is de code:

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim FeatureData As Object
Dim Feature As Object
Dim Component As Object

Sub main()
Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
Path = Part.GetPathName 'Chemin du fichier

'Enregistrement PDF
Part.SaveAs2 Left(Path, (Len(Path) - 6)) & "PDF", 0, True, False '

'Enregistrement DWG
Part.SaveAs2 Left(Path, (Len(Path) - 6)) & "DWG", 0, True, False '

MsgBox " Enregistrement réussi", vbInformation

Set Part = Nothing

End Sub

Voor een gelijkwaardig onderwerp (dwg-pdf en step) zie deze: de @Cyril_f macro functioneel is:

Het enige dat u moet veranderen als u er tevreden mee bent, is de toevoeging van mappen. (pdf, dwg, stap)
̈Er zijn verschillende methoden om dit te doen, maar je moet weten:
1-Of uw bestandsnaam hetzelfde aantal tekens heeft of niet, om de mapnaam te kunnen ophalen.
En voor de stap hier alleen stap op onderdeel als de montage niet werkt.

Om vervolgens uw bestandsnaam, map te manipuleren:

' PathName of current model document
Dim sModelFullPath As String
sModelFullPath = swModel.GetPathName

' get path name without filename
Dim sFilePath As String
sFilePath = Left(sModelFullPath, InStrRev(sModelFullPath, "\"))

' get filename and extension
Dim sFileName As String
sFileName = Right(sModelFullPath, Len(sModelFullPath) - InStrRev(sModelFullPath, "\"))

' get filename without extension
Dim sFileNameWithoutExtension As String
sFileNameWithoutExtension = Left(sFileName, InStrRev(sFileName, ".") - 1)

' combine everything to new path name
Dim sNewFullPath As String
sNewFullPath = prefix & sFileNameWithoutExtension & "REV" & CurrRev & ".pdf"

' SaveAs with new full path
Set swExportPDFData = swApp.GetExportFileData(1)
swModel.Extension.SaveAs sNewFullPath, 0, 0, swExportPDFData, 0, 0

1 like

Bedankt voor deze feedback, ik heb de code getest, maar het werkt niet op mijn pc, ik heb een bericht dat me vertelt dat ik een ongedefinieerd blok heb op lijn 118.

Wat betreft de bestanden, deze hebben niet hetzelfde aantal tekens, ze zijn als volgt samengesteld:
XXXX-XXXX-XXX-XXX - Benaming

Wat de stappen betreft, ben ik alleen op zoek naar kamertekeningen.

Als ik de volgende code goed begrijp, is het dan om het pad toe te voegen voor het opslaan van bestanden van de verschillende formaten?

Waarschijnlijk de aanwijzing (Revisie) die hij niet kan vinden.
En met deze code:

Option Explicit

Public Enum swDocumentTypes_e
    swDocNONE = 0       ' Used to be TYPE_NONE

    swDocPART = 1       ' Used to be TYPE_PART

    swDocASSEMBLY = 2   ' Used to be TYPE_ASSEMBLY

    swDocDRAWING = 3    ' Used to be TYPE_DRAWING
End Enum
 
Dim swApp                       As SldWorks.SldWorks
Dim swModel                     As SldWorks.ModelDoc2
Dim swDraw                      As SldWorks.DrawingDoc
Dim swView                      As SldWorks.View
Dim swConfig                    As SldWorks.Configuration

Dim vSheetNameArr               As Variant
Dim vSheetName                  As Variant

Dim I                           As Long
Dim nDocType                    As Long
Dim op                          As Long
Dim suppr                       As Long
Dim lErrors                     As Long
Dim lWarnings                   As Long

Dim boolstatus                  As Boolean
Dim bRet                        As Boolean
Dim FileConnu                   As Boolean

Dim nbConnu                     As Integer

Dim sModelName                  As String
Dim sPathName                   As String
Dim TabConnu(10000)             As String
Dim sConfigName                 As String
Dim sModelFullPath              As String
Dim sFilePath                   As String
Dim sFileName                   As String
Dim sFileNameWithoutExtension   As String

Sub main()



Set swApp = Application.SldWorks
boolstatus = swApp.SetUserPreferenceIntegerValue(swStepAP, 214) 'Force la version AP214
boolstatus = swApp.SetUserPreferenceIntegerValue(swStepExportPreference, swAcisOutputGeometryPreference_e.swAcisOutputAsSolidAndSurface) 'Force l'export en format Solid/Surface Geometry

Set swModel = swApp.ActiveDoc

' PathName of current model document
sModelFullPath = swModel.GetPathName

' get path name without filename
sFilePath = Left(sModelFullPath, InStrRev(sModelFullPath, "\"))

' get filename and extension
sFileName = Right(sModelFullPath, Len(sModelFullPath) - InStrRev(sModelFullPath, "\"))

' get filename without extension
sFileNameWithoutExtension = Left(sFileName, InStrRev(sFileName, ".") - 1)



Debug.Print sFilePath & "Pdf\" & sFileNameWithoutExtension & ".pdf"
'On vérifie si le dossier de sauvegarde existe sinon création de ce dossier
If Dir(sFilePath & "Pdf\", vbDirectory) = vbNullString Then
    MkDir sFilePath & "Pdf\"
End If
swModel.Extension.SaveAs sFilePath & "Pdf\" & sFileNameWithoutExtension & ".pdf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, lErrors, lWarnings
'On vérifie si le dossier de sauvegarde existe sinon création de ce dossier
If Dir(sFilePath & "Dwg\", vbDirectory) = vbNullString Then
    MkDir sFilePath & "Dwg\"
End If
swModel.Extension.SaveAs sFilePath & "Dwg\" & sFileNameWithoutExtension & ".dwg", swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, lErrors, lWarnings
'On vérifie si le dossier de sauvegarde existe sinon création de ce dossier
If Dir(sFilePath & "Step\", vbDirectory) = vbNullString Then
    MkDir sFilePath & "Step\"
End If
Call ExportStep

End Sub
Sub ExportStep()
Set swDraw = swModel
vSheetName = swDraw.GetSheetNames
vSheetNameArr = swDraw.GetSheetNames

For Each vSheetName In vSheetNameArr
        
    bRet = swDraw.ActivateSheet(vSheetName): Debug.Assert bRet
    Set swView = swDraw.GetFirstView 'Sélectionne le fond de plan
    Set swView = swView.GetNextView  'Passe à la vue suivante pour exclure le fond de plan
                
    While Not swView Is Nothing
           
        ' Determine if this is a view of a part or assembly

        sModelName = swView.GetReferencedModelName

        sModelName = LCase(sModelName)
                        
        sConfigName = swView.ReferencedConfiguration
        
        FileConnu = False
        
        If InStr(sModelName, "sldprt") > 0 Then
            nDocType = swDocPART
        ElseIf InStr(sModelName, "slasm") > 0 Then
            nDocType = swDocASSEMBLY
        Else
            nDocType = swDocNONE
            Exit Sub
        End If
                       
        If nDocType = 1 Then
            For I = 1 To nbConnu
                If UCase(sModelName) & " - " & UCase(sConfigName) = TabConnu(I) Then
                    FileConnu = True
                End If
            Next
            If Not FileConnu Then
                nbConnu = nbConnu + 1
                TabConnu(nbConnu) = UCase(sModelName) & " - " & UCase(sConfigName)
                Call Export
            End If
        End If
        
        Set swView = swView.GetNextView
    Wend

Next vSheetName



End Sub
Sub Export()
Set swModel = swApp.ActivateDoc3(sModelName, True, swOpenDocOptions_Silent, lErrors)
Set swModel = swApp.ActiveDoc
boolstatus = swModel.ShowConfiguration2(sConfigName)
Set swConfig = swModel.GetActiveConfiguration
sPathName = sFilePath & "Step\" & sFileNameWithoutExtension & ".step"
'sPathName = swModel.GetPathName & ".step"
If Dir(sPathName, vbHidden) <> "" Then              'Test l'existence du fichier
    suppr = MsgBox("Le fichier " & sPathName & " existe déjà, voulez vous le supprimer?", vbYesNo) 'Message utilisateur confirmation de suppression oui/non
        If suppr = vbYes Then                       'Réponse Oui
            Kill (sPathName) 'Suppression du fichier existant
            swModel.SaveAs2 sPathName, 0, True, False  'Enregistrement du fichier
            op = MsgBox("Le fichier a été enregistré sous " & sPathName & vbNewLine)
            Else                                    'Réponse NON
        MsgBox ("Fichier conservé")                 'Message utilisateur
        End If
        Else
        swModel.SaveAs2 sPathName, 0, True, False      'Enregistrement du fichier
        op = MsgBox("Le fichier a été enregistré sous " & sPathName) 'Message utilisateur
    End If
swApp.CloseDoc (sModelName)
Set swModel = swApp.ActiveDoc
End Sub

1 like

Ik heb het net getest, maar ik krijg nog steeds dezelfde melding

Start je de macro vanuit een tekening?

1 like

Ja, ik heb een basistekening gemaakt van een plaatwerkonderdeel

Heb je het ook opgenomen? (indien niet geregistreerd, kan de naam niet vinden)

1 like

Ja, het is goed opgenomen!
het werkt met mijn kleine macro kan ik PDF / DWG doen

Hebben de tekeningen en de kamers dezelfde naam? (exclusief extensies)

1 like

Als je in versie < of = tot 2020 zit kun je ook een plan + onderdeel bijvoegen als je wilt.
Ik reproduceer het probleem niet.

2 likes

Ja, want als ik de tekening opsla, neemt deze wel de naam van de kamer in beslag!
Hier zijn de bestanden (ik zit in de 2022-versie)
TMS-64300-003-PDM - Cap.SLDDRW (183.1 KB)
TMS-64300-003-PDM - Cap.SLDPRT (111.7 KB)

Als ik kan, open ik een pc met de 2023 om te testen, maar voorlopig is dat niet mogelijk.
Kijk of je de oproep ExportStep al verwijdert als de pdf en de dwg goed gedaan zijn om mee te beginnen.

1 like

Het is oké dat ik de PDF en de DWG in hetzelfde bestand heb als het SW-plan. Inderdaad, door het verwijderen van de ExportStep-aanroep werkt het

Ik heb getest op SW2023, de 3 bestanden worden geëxporteerd naar mijn huis.
Het komt dus niet van de bestandsnaam. Zijn uw bestanden lokaal of op netwerken?
Geen speciale tekens in uw bestandspad?
Probeer het bijvoorbeeld te kopiëren naar C:\Temp\YourFiles om te zien of het werkt
image
image

2 likes

Oké, ik heb gewoon PDF/DWG

De bestanden staan op netwerken en nee, er zijn geen speciale tekens op het pad

De ExportStep-aanroep moet worden teruggezet.
En test op de C-schijf met een eenvoudig pad om te zien.

1 like

Ik heb de test gedaan door het op mijn bureau te leggen en het werkte niet en hetzelfde op de C heb ik dezelfde boodschap als in het begin.

Ik geef toe dat ik verdwaald ben...

Ik ben ook aan het drogen! :crazy_face:
Kunt u de macro bewerken, voeg de Execution en Local Variables vensters (zie afbeelding), klik dan net na Sub main() en druk op F8 zodat het bugs?
image

Kortom, verscheur de macro stap voor stap. En controleer in het lokale variabelevenster de waarde van sModelName wanneer deze crasht:


En ook als swModel leeg blijft.

1 like