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.
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.
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
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
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
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