Makro packandgo (kompozycja do domu)

Witam wszystkich,

Próbuję sprawić, aby to makro z solidworks help działało, ale nie działa w solidworks

Czy ktoś może mi pomóc?

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

 

 

Witam

Dla mnie działa to bardzo dobrze, pod warunkiem, że zmienię ścieżkę do pliku do otwarcia ("C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\samples\tutorial\advdrawings\handle.sldasm"), który nie istnieje na moim komputerze i zastąpię go prawidłową ścieżką.

Pozdrowienia

Tak, zmieniłem ścieżkę 

ale wyświetla mi błąd "błąd wykonania '91': Zmienna obiektu lub Z zmienną blokową nie jest zdefiniowany", gdy wykonuję debugowanie tego, ale na "Ustaw swModelDocExt = swModelDoc.Extension" na początku programu

Z drugiej strony skopiowałem kod do pliku . SWP i ja uruchamiamy makro z solidworks, nie widzę dlaczego to nie działa.

Czy nie będę miał brakującego odniesienia do biblioteki?

 

Witam

Nie. Jeśli brakuje odwołania, wystąpi błąd innego typu.

Wydaje mi się, że masz błąd ścieżki, prawej lub tylko do odczytu. A twój obiekt swModelDoc powinien pozostać pusty. Spróbuj krok po kroku sprawdzić wartość swojego przedmiotu.

1 polubienie

Dokładnie tak zrobiłem i mam te same referencje co Ty (do wersji SW gotowej).

Czy masz pewność, że wprowadzone ścieżki i nazwy zestawów są prawidłowe?

Aby sprawdzić, czy pochodzi stamtąd, zastąp wiersze:

openFile = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\samples\tutorial\advdrawings\handle.sldasm"
Ustaw swModelDoc = swApp.OpenDoc6(openFile, swDocASSEMBLY, swOpenDocOptions_Silent, "", błędy, ostrzeżenia)

przez:

Ustaw swModelDoc = swApp.ActiveDoc

, a następnie otwiera zespół przed uruchomieniem makra.

Małe pytanie też, czy jest to zestaw, który umieszczasz jako plik w ścieżce?

Jeszcze jedno pytanie, czy umieściłeś rozszerzenie swojego zestawu w nazwie pliku, nawet jeśli nie jest ono wyświetlane w Eksploratorze Windows (.sldasm)?

to działa, musiałem popełnić błąd w kopii ścieżki.

Chciałbym dodać funkcję do "PackAndGo", zmienić nazwy wszystkich plików, które zawierają "XXXXX" i zmienić ich nazwy na numer 44444 (precyzja, że XXXXX nie jest w sufiksie ani prefiksie)

 

tak, jest to zestaw w pliku ścieżki z nazwą rozszerzenia

    Spróbuj czegoś takiego:

' 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

 

Czy to nie  działa?

Muszę to umieścić czy w kodzie? Umieściłem to na końcu w ten sposób

'[.....]

' 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

 

Nie wystarczy wklejać jeden fragment kodu po drugim. Musisz spróbować trochę zrozumieć...

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

Dodaje prefiks i sufiks. Ponieważ nie zmieniłeś wartości, wątpię, że tego potrzebujesz. Możesz go usunąć.

 

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

Spowoduje to wyświetlenie tylko ostatecznych nazw dokumentów w debugerze. Nie sądzę, żebyś tego potrzebował.

 

Wykonaj test krok po kroku, aby sprawdzić, czy nazwy plików zmieniają się poprawnie.

1 polubienie

Oto fragment funkcjonalnego makra i czyste wyświetlacze w debuggerze:

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

Uważaj, aby nie zapomnieć o linii:

status = swPackAndGo.SetDocumentSaveToNames(pgFileNames)

po pętli, aby zmienić nazwy plików, w tym "XXXXX", w przeciwnym razie PackAndGo nie uwzględni modyfikacji.

Pozdrowienia

1 polubienie

Witam, po wypróbowaniu czystego makra nie zmienia nazwy pliku

  Dołączam ASM do testów, aby sprawdzić, czy działa dla Ciebie

 


xxxxx.zip

Witam

po przetestowaniu mojego makra na twoim zestawie, działa to poprzez umieszczenie serii X małymi literami (x).

Pozdrowienia

2 polubienia

Próbowałem kilka razy , ale nie myślałem o tym. Dziękuję

Z drugiej strony, nie zmienia to nazwy planów, które są z moim zespołem i moimi częściami? Masz pomysł?

 

Witam

Nie, nie zmienia to nazwy planu, ponieważ plik planu nie jest, ściśle mówiąc , częścią listy plików PackAndGo, a jedynie jest osadzony za pomocą znacznika wyboru funkcji. Możesz jednak w swoim planie makr zmienić nazwy wszystkich odpowiednich planów, po funkcji PackAndGo, za pomocą standardowych funkcji zarządzania plikami VBA, informacje na ten temat znajdziesz TUTAJ.

Pozdrowienia

1 polubienie

Dziękuję bardzo, poradziłem sobie z tym zewnętrznym zarządzaniem w Solidworks.

Mam ostatnie pytanie, czy jest możliwość wykluczenia w makrze PackAndGo plików, które nie mają w nazwie pliku 'XXXXX'

Witam

Spróbuj, wpisując :

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)

 

Pozdrowienia