Makro packandgo (Komposition zum Mitnehmen)

Hallo an alle

Ich versuche, dieses Makro aus der Solidworks-Hilfe zum Laufen zu bringen, aber es funktioniert nicht unter SolidWorks

Kann mir jemand helfen?

http://help.solidworks.com/2015/English/api/sldworksapi/Pack_and_Go_an_Assembly_Example_vb.htm?verRedirect=1

 

 

Hallo

Für mich funktioniert es sehr gut, vorausgesetzt, ich ändere den Pfad der Datei zum Öffnen ("C:\Programme\SOLIDWORKS Corp\SOLIDWORKS\samples\tutorial\advdrawings\handle.sldasm"), die auf meinem PC nicht existiert, und ersetze sie durch einen gültigen Pfad.

Herzliche Grüße

Ja, ich habe den Weg geändert

aber es gibt mir den Fehler "Laufzeitfehler '91': Objektvariable oder Mit Block variabel nicht definiert", wenn ich dies debugge, aber auf "Set swModelDocExt = swModelDoc.Extension" am Anfang des Programms

Auf der anderen Seite habe ich den Code in eine . SWP und ich führe das Makro von SolidWorks aus, ich sehe nicht, warum es nicht funktioniert.

Fehlt dann keine Bibliotheksreferenz?

 

Hallo

Nein. Wenn Sie eine fehlende Referenz hätten, hätten Sie eine andere Art von Fehler.

Ich denke, Sie haben einen Pfad-, Rechts- oder schreibgeschützten Fehler. Und Ihr swModelDoc-Objekt sollte leer bleiben. Versuchen Sie, Schritt für Schritt mit [F5] den Wert Ihres Artikels zu überprüfen.

1 „Gefällt mir“

Das ist genau das, was ich getan habe und ich habe die gleichen Referenzen wie du (zur SW-Version fertig).

Sind Sie sicher, dass die von Ihnen eingegebenen Pfade und Assemblynamen gültig sind?

Um zu sehen, ob es von dort kommt, ersetzen Sie die Zeilen:

openFile = "C:\Programme\SOLIDWORKS Corp\SOLIDWORKS\samples\tutorial\advdrawings\handle.sldasm"
Set swModelDoc = swApp.OpenDoc6(openFile, swDocASSEMBLY, swOpenDocOptions_Silent, "", Fehler, Warnungen)

bis:

Legen Sie swModelDoc = swApp.ActiveDoc fest

und öffnet dann eine Assembly, bevor das Makro gestartet wird.

Kleine Frage auch, ist es eine Assembly, die Sie als Datei in den Pfad einfügen?

Noch eine Frage: Haben Sie die Erweiterung Ihrer Assembly in den Dateinamen eingefügt, auch wenn sie im Windows Explorer (.sldasm) nicht angezeigt wird?

es funktioniert, ich muss einen Fehler in der Kopie des Pfades gemacht haben.

Ich möchte dem "PackAndGo" eine Funktion hinzufügen, alle Dateien, die "XXXXX" enthalten, umbenennen und mit der Nummer 44444 umbenennen (Genauigkeit der XXXXX steht nicht im Suffix oder Präfix)

 

Ja, es handelt sich um eine Assembly in der Pfaddatei mit dem Namen der Erweiterung

    Versuchen Sie so etwas:

' Verify document paths and filenames after adding prefix and suffix
ReDim pgGetFileNames(namesCount - 1)
ReDim pgDocumentStatus(namesCount - 1)
status = swPackAndGo.GetDocumentSaveToNames(pgGetFileNames, pgDocumentStatus)
For i = 0 To (namesCount - 1)
     If Instr(pgGetFileNames(i), "XXXXXX") <> 0 Then
          pgGetFileNames(i) = Replace(pgGetFileNames(i), "XXXXX", "444444")
     End If
Next i

 

Funktioniert es nicht ?

Ich muss es platzieren oder in den Code einfügen? Ich habe es am Ende so eingefügt

'[.....]

' Add a prefix and suffix to the new Pack and Go filenames-------------------- (Aplatissez la structure de dossiers Pack and Go; enregistrer tous les fichiers dans le répertoire racine)
swPackAndGo.AddPrefix = "SW_"
swPackAndGo.AddSuffix = "_PackAndGo"


' Verify document paths and filenames after adding prefix and suffix----------------- (Aplatissez la structure de dossiers Pack and Go; enregistrer tous les fichiers dans le répertoire racine)
ReDim pgGetFileNames(namesCount - 1)
ReDim pgDocumentStatus(namesCount - 1)
status = swPackAndGo.GetDocumentSaveToNames(pgGetFileNames, pgDocumentStatus)
For i = 0 To (namesCount - 1)
If InStr(pgGetFileNames(i), "xxxxx") <> 0 Then
pgGetFileNames(i) = Replace(pgGetFileNames(i), "xxxxx", "yyyyy")
End If
Next i



 ' Verify document paths and filenames after adding prefix and suffix------------------ (Vérifier les chemins d'accès aux documents et les noms de fichiers après avoir ajouté un préfixe et un suffixe)
ReDim pgGetFileNames(namesCount - 1)
ReDim pgDocumentStatus(namesCount - 1)
status = swPackAndGo.GetDocumentSaveToNames(pgGetFileNames, pgDocumentStatus)
Debug.Print ""
Debug.Print "  My Pack and Go path and filenames after adding prefix and suffix: "
For i = 0 To (namesCount - 1)
     Debug.Print "    My path and filename is: " & pgGetFileNames(i)
Next i
' Pack and Go
statuses = swModelDocExt.SavePackAndGo(swPackAndGo)

End Sub

 

Es reicht nicht aus, ein Stück Code nach dem anderen einzufügen. Man muss versuchen, ein wenig zu verstehen...

swPackAndGo.AddPrefix = "SW_"
swPackAndGo.AddSuffix = "_PackAndGo"

Fügt ein Präfix und ein Suffix hinzu. Da Sie die Werte nicht geändert haben, bezweifle ich, dass Sie es brauchen. Sie können es löschen.

 

ReDim pgGetFileNames(namesCount - 1)
ReDim pgDocumentStatus(namesCount - 1)
status = swPackAndGo.GetDocumentSaveToNames(pgGetFileNames, pgDocumentStatus)
Debug.Print ""
Debug.Print "  My Pack and Go path and filenames after adding prefix and suffix: "
For i = 0 To (namesCount - 1)
     Debug.Print "    My path and filename is: " & pgGetFileNames(i)
Next i

Dadurch werden nur die endgültigen Namen der Dokumente im Debugger angezeigt. Ich glaube nicht, dass du das brauchst.

 

Führen Sie einen Schritt-für-Schritt-Test durch, um festzustellen, ob sich die Dateinamen korrekt ändern.

1 „Gefällt mir“

Hier ist ein Stück funktionales Makro und säubern Sie die Anzeigen im Debugger:

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModelDoc As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swPackAndGo As SldWorks.PackAndGo
Dim openFile As String
Dim pgFileNames As Variant
Dim pgFileStatus As Variant
Dim pgGetFileNames As Variant
Dim pgDocumentStatus As Variant
Dim status As Boolean
Dim warnings As Long
Dim errors As Long
Dim i As Long
Dim namesCount As Long
Dim myPath As String
Dim statuses As Variant

Sub main()

    Set swApp = Application.SldWorks

    ' Open assembly
    openFile = "C:\Users\DRO\Desktop\Nouveau dossier\Assemblage1.SLDASM"
    Set swModelDoc = swApp.OpenDoc6(openFile, swDocASSEMBLY, swOpenDocOptions_Silent, "", errors, warnings)
    'Set swModelDoc = swApp.ActiveDoc
    Set swModelDocExt = swModelDoc.Extension

    ' Get Pack and Go object
    Set swPackAndGo = swModelDocExt.GetPackAndGo

    ' Get number of documents in assembly
    namesCount = swPackAndGo.GetDocumentNamesCount

    ' Include any drawings, SOLIDWORKS Simulation results, and SOLIDWORKS Toolbox components
    swPackAndGo.IncludeDrawings = True
    swPackAndGo.IncludeSimulationResults = True
    swPackAndGo.IncludeToolboxComponents = True

    ' Get current paths and filenames of the assembly's documents
    'status = swPackAndGo.GetDocumentNames(pgFileNames)

    ' Get current save-to paths and filenames of the assembly's documents
    status = swPackAndGo.GetDocumentSaveToNames(pgFileNames, pgFileStatus)

    ' Set document paths and names for Pack and Go
    For i = 0 To (namesCount - 1)
        If InStr(pgFileNames(i), "XXXXX") <> 0 Then
            pgFileNames(i) = Replace(pgFileNames(i), "XXXXX", "44444")
        End If
    Next i
    status = swPackAndGo.SetDocumentSaveToNames(pgFileNames)
    
    ' Set folder where to save the files
    myPath = "C:\Users\DRO\Desktop\Temp PDF\"
    status = swPackAndGo.SetSaveToName(True, myPath)
    
    ' Flatten the Pack and Go folder structure; save all files to the root directory
    swPackAndGo.FlattenToSingleFolder = True

    ' Add a prefix and suffix to the new Pack and Go filenames
    swPackAndGo.AddPrefix = "SW_"
    swPackAndGo.AddSuffix = "_PackAndGo"

    ' Pack and Go
    statuses = swModelDocExt.SavePackAndGo(swPackAndGo)

End Sub

Achten Sie darauf, dass Sie die Zeile nicht vergessen:

status = swPackAndGo.SetDocumentSaveToNames(pgFileNames)

nach der Schleife die Dateien mit "XXXXX" umzubenennen, andernfalls berücksichtigt das PackAndGo die Änderung nicht.

Herzliche Grüße

1 „Gefällt mir“

Hallo, nachdem Sie Ihr sauberes Makro ausprobiert haben, ändert sich der Name der Datei nicht

  Ich hänge ein ASM zum Testen an, um zu sehen, ob es für Sie funktioniert

 


xxxxx.zip

Hallo

Nachdem ich mein Makro auf Ihrer Assembly getestet habe, funktioniert es, indem die Reihe von Xs in Kleinbuchstaben (X) gesetzt wird.

Herzliche Grüße

2 „Gefällt mir“

Ich hatte es mehrmals versucht, aber ich hatte nicht darüber nachgedacht. Vielen Dank

Auf der anderen Seite ändert es nicht den Namen der Pläne, die sich mit meiner Baugruppe und meinen Teilen befinden? Haben Sie eine Idee?

 

Hallo

Nein, der Name des Plans wird dadurch nicht geändert, da die Plandatei streng genommen nicht Teil der PackAndGo-Dateiliste ist, sondern nur über ein Häkchen der Funktion eingebettet wird. Sie können jedoch in Ihrem Makroplan alle betroffenen Pläne umbenennen, nach der PackAndGo-Funktion, durch die Standard-VBA-Dateiverwaltungsfunktionen, finden Sie Informationen dazu HIER.

Herzliche Grüße

1 „Gefällt mir“

Vielen Dank, ich konnte mit dieser externen Leitung bei Solidworks zurechtkommen .

Ich habe eine letzte Frage, ist es möglich, im PackAndGo-Makro die Dateien auszuschließen, die nicht im Dateinamen 'XXXXX' enthalten sind?

Hallo

Versuchen Sie, indem Sie :

For i = 0 To (namesCount - 1)
    If InStr(pgFileNames(i), "xxxxx") <> 0 Then
        pgFileNames(i) = Replace(pgFileNames(i), "xxxxx", "44444")
    Else
        pgFileNames(i) = ""
    End If
Next i
status = swPackAndGo.SetDocumentSaveToNames(pgFileNames)

 

Herzliche Grüße