Zapisywanie serii planów w poprzedniej wersji

Witam wszystkich,
Korzystam z Solidworks 2024 Sp5, na którym stworzyłem ASM, części i około pięćdziesięciu plików planu.

Udało mi się zrobić " pack and go " w poprzednich wersjach (2022 i 2023), ale działa on tylko do części i montażu. Rysunki sprawdzone i wyeksportowane przez " pack and Go " pozostają w 2024 roku...

Po kontakcie i wymianie z pomocą odpowiedź brzmi: " to normalna operacja SolidWorks " (rozumiecie: do dzieła! to nie nasza sprawa!)

Próbowałem harmonogramu zadań, próbowałem przejść przez makro... krótko mówiąc, jestem suchy!
Jedyną metodą, która działa, jest otwieranie planów pojedynczo, a następnie zapisywanie ich w wcześniejszej wersji.
W mojej logice fenicantności (i jakości!) wydaje mi się to nie do pomyślenia przy 50 ujęciach, podobnie jak przy przyszłych projektach.

Czy ktoś wymyślił trik, by wykorzystać tę WSPANIAŁĄ funkcję " zapisz jako wczesną wersję " dla partii plików rysunkowych?

Z góry dziękuję!

Odpowiedź AI:

Pytanie Odpowiedź
Znany błąd? :white_check_mark: Tak, szeroko zgłaszane (choć oficjalnie nie uznane za błąd)
Normalne zachowanie? :warning: Oficjalnie tak... ale bardzo sporne
Ogłoszono poprawkę? :x: Nie
Możliwe obejście? :white_check_mark: Makro VBA lub ręczna kopia zapasowa
Niezawodny zestaw i wybierz retro DRW? :x:

Rozwiązanie makra VBA do konwersji folderu planu (Nie testowane wyjście w obecnej formie przez AI Copilot):

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim errors As Long
Dim warnings As Long

Sub main()

    Set swApp = Application.SldWorks

    ' ⚠️ MODIFIER LE CHEMIN DU DOSSIER ICI
    Dim folderPath As String
    folderPath = "C:\TEMP\Plans_2024"

    ' Choisir la version cible :
    ' swSaveAsVersion_e.swSaveAsCurrentVersion
    ' swSaveAsVersion_e.swSaveAs2023
    ' swSaveAsVersion_e.swSaveAs2022
    Dim targetVersion As Long
    targetVersion = swSaveAsVersion_e.swSaveAs2023

    Dim fileName As String
    fileName = Dir(folderPath & "\*.slddrw")

    Do While fileName <> ""

        Dim fullPath As String
        fullPath = folderPath & "\" & fileName

        Set swModel = swApp.OpenDoc6( _
            fullPath, _
            swDocumentTypes_e.swDocDRAWING, _
            swOpenDocOptions_e.swOpenDocOptions_Silent, _
            "", _
            errors, _
            warnings)

        If Not swModel Is Nothing Then

            swModel.ForceRebuild3 False

            Dim savePath As String
            savePath = folderPath & "\OLDVER_" & fileName

            swModel.SaveAs4 _
                savePath, _
                targetVersion, _
                swSaveAsOptions_e.swSaveAsOptions_Silent, _
                errors, _
                warnings

            swApp.CloseDoc swModel.GetTitle

        End If

        fileName = Dir
    Loop

    MsgBox "Conversion terminée !", vbInformation

End Sub

Nie mogę przetestować makro ze względu na sw2023, ale kod wydaje się poprawny na pierwszy rzut oka.

2 polubienia

Dziękuję za poszukiwania!

Ale już spędziłem kilka godzin, próbując makro z drugim pilotem, zanim powiedzieli mi, że to w końcu niemożliwe.

Mam nadzieję, że coś przeoczyłem... :confused:

Spróbuj dać nam opinię, czy to błąd i gdzie (przechwycenie błędu).
Jeśli funkcjonalność (zapisana w poprzedniej wersji) nie istnieje w API, niewiele zrobimy.
Jeśli pojawi się kolejny błąd, możemy pomóc Ci w debugowaniu.

w rzeczywistości funkcjonalność w VBA nie istnieje...

Niestety, to nie pierwszy raz, gdy AI wymyśla jakąś funkcję w API...

Spróbuj tego na wszelki wypadek, używając metody SaveAs3 (IModelDocExtension) zamiast saveas4.
Ta funkcja istnieje po tym, jak jest dobrze udokumentowana z opcją wersji, więc można ją przetestować.

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExt As SldWorks.ModelDocExtension
Dim errors As Long
Dim warnings As Long

Sub main()

    Set swApp = Application.SldWorks

    ' ⚠️ CHEMIN À ADAPTER
    Dim folderPath As String
    folderPath = "C:\TEMP\Plans_2024"

    ' Version cible
    Dim targetVersion As Long
    targetVersion = swSaveAsVersion_e.swSaveAs2023
    ' swSaveAs2022 possible aussi

    Dim fileName As String
    fileName = Dir(folderPath & "\*.slddrw")

    Do While fileName <> ""

        Dim fullPath As String
        fullPath = folderPath & "\" & fileName

        Set swModel = swApp.OpenDoc6( _
            fullPath, _
            swDocumentTypes_e.swDocDRAWING, _
            swOpenDocOptions_e.swOpenDocOptions_Silent, _
            "", _
            errors, _
            warnings)

        If Not swModel Is Nothing Then

            Set swExt = swModel.Extension
            swModel.ForceRebuild3 False

            Dim savePath As String
            savePath = folderPath & "\OLDVER_" & fileName

            swExt.SaveAs3 _
                savePath, _
                swSaveAsOptions_e.swSaveAsOptions_Silent, _
                targetVersion, _
                errors, _
                warnings

            swApp.CloseDoc swModel.GetTitle

        End If

        fileName = Dir
    Loop

    MsgBox "Conversion terminée", vbInformation

End Sub

Niestety " swSaveAs2023 " nie istnieje :confused:

Cześć
Czy nie da się powiedzieć makru, żeby otwierał wszystkie klipy pojedynczo i je drukował? W ramach nadzwyczajnego 2024 roku :grinning:
Czy masz PDM? To makro zrobiło to z nami w innej epoce po wyborze europosłów.

To bałagan :upside_down_face:

Granice AI!
Ostatnia próba, niełatwa, gdy nie da się przetestować.
Najwyraźniej musisz użyć " AdvancedSaveAsOptions.SaveAsPreviousVersion" ":

Option Explicit

Dim swApp   As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExt   As SldWorks.ModelDocExtension
Dim advOpts As SldWorks.AdvancedSaveAsOptions

Dim errs    As Long
Dim warns   As Long

Sub main()

    Set swApp = Application.SldWorks

    ' >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ' A MODIFIER
    Dim folderPath As String
    folderPath = "C:\TEMP\Plans_2024"

    ' -1 = version précédente
    ' -2 = deux versions précédentes
    Dim previousOffset As Long
    previousOffset = -1   ' 2024 -> 2023
    ' previousOffset = -2 ' 2024 -> 2022
    ' >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Dim fileName As String
    fileName = Dir(folderPath & "\*.slddrw")

    Do While fileName <> ""

        Dim fullPath As String
        fullPath = folderPath & "\" & fileName

        Set swModel = swApp.OpenDoc6( _
            fullPath, _
            swDocumentTypes_e.swDocDRAWING, _
            swOpenDocOptions_e.swOpenDocOptions_Silent, _
            "", _
            errs, _
            warns)

        If swModel Is Nothing Then
            Debug.Print "❌ Impossible d’ouvrir : " & fileName
            GoTo NextFile
        End If

        Set swExt = swModel.Extension

        Set advOpts = swExt.GetAdvancedSaveAsOptions( _
            swSaveWithReferencesOptions_e.swSaveWithReferencesOptions_None)

        advOpts.SaveAsPreviousVersion = previousOffset
        advOpts.SaveAllAsCopy = True

        Dim savePath As String
        savePath = folderPath & "\OLDVER_" & fileName

        If False = swExt.SaveAs3( _
            savePath, _
            swSaveAsVersion_e.swSaveAsCurrentVersion, _
            swSaveAsOptions_e.swSaveAsOptions_Silent, _
            Nothing, _
            advOpts, _
            errs, _
            warns) Then

            Debug.Print "❌ ERREUR SaveAs : " & fileName & _
                        " | Code = " & errs
        Else
            Debug.Print "✅ OK : " & fileName
        End If

        swApp.CloseDoc swModel.GetTitle

NextFile:
        fileName = Dir
    Loop

    MsgBox "Traitement terminé (voir Ctrl+G pour le log)", vbInformation

End Sub
``

Jeszcze raz dzięki za ten trop.

Ale po wielu iteracjach i debugowaniu oto wniosek :confused:

Przepraszam za zimne ślady.
Najpoważniejszy trop jest taki:

Sprawdź to na MEP, jeśli działa, oznacza to, że można to robić partiami. (Poprzez integrację lub modyfikację tego makra).
Codestack to wiarygodne źródło, w przeciwieństwie do AI...

1 polubienie