Hallo
Voor mij werkt het heel goed, op voorwaarde dat ik het pad van het bestand om te openen ("C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\samples\tutorial\advdrawings\handle.sldasm") dat niet bestaat op mijn pc verander en het vervang door een geldig pad.
Vriendelijke groeten
Ja, ik heb het pad veranderd
maar het geeft me een foutmelding "runtime error '91': Object variable or With block varable not defined" wanneer ik dit debuggen, maar op "Set swModelDocExt = swModelDoc.Extension" aan het begin van het programma
Aan de andere kant heb ik de code gekopieerd naar een . SWP en ik draaien de macro van solidworks, ik zie niet in waarom het niet werkt.
Ontbreekt er dan geen bibliotheekreferentie?
Hallo
Nee. Als u een ontbrekende referentie had, zou u een ander type fout hebben.
Ik denk dat je een pad-, rechts- of alleen-lezen fout hebt. En je swModelDoc object moet leeg blijven. Probeer stap voor stap met [F5] de waarde van uw item te controleren.
Dat is precies wat ik heb gedaan en ik heb dezelfde referenties als jij (naar de versie van SW klaar).
Weet u zeker dat de paden en assemblagenamen die u hebt ingevoerd geldig zijn?
Om te zien of het daar vandaan komt, vervangt u de regels:
openFile = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\samples\tutorial\advdrawings\handle.sldasm"
Stel swModelDoc = swApp.OpenDoc6(openFile, swDocASSEMBLY, swOpenDocOptions_Silent, "", fouten, waarschuwingen) in
bij:
Stel swModelDoc in = swApp.ActiveDoc
en opent vervolgens een assembly voordat de macro wordt gestart.
Kleine vraag ook, is het een assembly die je als bestand op het pad zet?
Nog een vraag, heb je de extensie van je assembly in de bestandsnaam gezet, zelfs als deze niet wordt weergegeven in Windows Verkenner (.sldasm)?
het werkt, ik moet een fout hebben gemaakt in de kopie van het pad.
Ik wil graag een functie toevoegen aan de "PackAndGo", hernoem alle bestanden die "XXXXX" bevatten en hernoem ze met een nummer 44444 (precisie de XXXXX is niet in achtervoegsel of voorvoegsel)
Ja, het is een assembly in het padbestand met de naam van de extensie
Probeer eens zoiets:
' 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
Lukt het niet ?
Ik moet het plaatsen of in de code? Ik zet het aan het einde als volgt
'[.....]
' 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
Het is niet voldoende om het ene stukje code na het andere te plakken. Je moet proberen een beetje te begrijpen...
swPackAndGo.AddPrefix = "SW_"
swPackAndGo.AddSuffix = "_PackAndGo"
Voegt een voorvoegsel en achtervoegsel toe. Aangezien je de waarden niet hebt veranderd, betwijfel ik of je het nodig hebt. U kunt het verwijderen.
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
Dit geeft alleen de definitieve namen van de documenten in de debugger weer. Ik denk niet dat je het nodig hebt.
Een stap-voor-stap test gedaan om te zien of de bestandsnamen correct veranderen.
Hier is een stukje functionele macro en schoon van de displays in de 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
Pas op dat u de regel niet vergeet:
status = swPackAndGo.SetDocumentSaveToNames(pgFileNames)
na de lus om de bestanden te hernoemen, inclusief "XXXXX", anders houdt de PackAndGo geen rekening met de wijziging.
Vriendelijke groeten
Hallo, na het proberen van uw schone macro verandert de naam van het bestand niet
Ik voeg een ASM toe om te testen om te zien of het voor jou werkt
xxxxx.zip
Hallo
na het testen van mijn macro op uw assemblage, werkt het door de reeks X-en in kleine letters (x) te zetten.
Vriendelijke groeten
Ik had het verschillende keren geprobeerd, maar ik had er niet over nagedacht. Bedankt
Aan de andere kant verandert het niets aan de naam van de plannen die bij mijn assemblage en mijn onderdelen zitten? Heb je een idee?
Hallo
Nee, dit verandert niets aan de naam van het plan omdat het planbestand strikt genomen geen deel uitmaakt van de PackAndGo-bestandenlijst, maar alleen is ingesloten via een vinkje van de functie. U kunt echter in uw macroplan om alle betrokken plannen, na de PackAndGo-functie, te hernoemen naar de standaard VBA-bestandsbeheerfuncties, u vindt HIER informatie om dit te doen.
Vriendelijke groeten
Heel erg bedankt, ik zou het kunnen redden met dit externe beheer bij Solidworks.
Ik heb nog een laatste verzoek, is het mogelijk om in de PackAndGo macro de bestanden uit te sluiten die niet de bestandsnaam 'XXXXX' hebben?
Hallo
Probeer door te zetten :
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)
Vriendelijke groeten