Macro packandgo (samenstelling om mee naar huis te nemen)

Hallo allemaal,

Ik probeer deze macro van solidworks te laten werken, maar het werkt niet onder solidworks

Kan iemand mij helpen?

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

 

 

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.

1 like

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.

1 like

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

1 like

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

2 likes

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

1 like

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