Makro do masowej wymiany części zespołu przez równoważność nazwy?

Cześć ludzie

Po użyciu " CircuitwWorks " otrzymuję zespół składający się z kilku części. Są one pobierane z folderu " Komponenty ".

Ponadto posiadam jeszcze jeden niezależny katalog " Baza danych ", w którym znajdują się inne części.

Czy wiesz, czy istnieje sposób na zastąpienie części zespołu z folderu Komponenty częściami z folderu Baza danych?

Aby ułatwić identyfikację i zamianę, nazwy udziałów używane w komponentach i bazie danych są podobne (ale nie identyczne): na przykład " Foo-xxx-123-abs.SLDPRT " należy zastąpić " Toto_. SLDPRT ".

Obraz w kawałkach jest być może bardziej wymowny...

Mamy tu początek w skali makro, ale może to nie jest dobry początek?

Z góry dziękuję i życzę miłego dnia!

Gwen.

Witam

Jeżeli makro nie jest wymagane, istnieje sposób na zastąpienie komponentów za pomocą menu kontekstowego komponentu w menedżerze operacji featureManager.

Zaznacz wszystkie identyczne komponenty > kliknij prawym przyciskiem myszy dowolny z wybranych elementów > opcji Zamień komponenty.

Powtórz te czynności dla każdego komponentu.

Witaj Sylk,

Dziękujemy za Twoją opinię!

Problem w tym, że czynność tę można powtarzać wiele razy... może nawet powyżej 100, więc bardzo długo :open_mouth:

1 polubienie

Witam;

W Twoim przypadku makro, które jest najbliższe Twoim potrzebom, to to:

' Définition du répertoire contenant les fichiers de remplacement
Const REPLACEMENT_DIR As String = "D:\Assembly\Replacement"
' Définition du suffixe qui sera ajouté au nom du fichier de remplacement
Const SUFFIX As String = "_new"

' Déclaration de l’objet principal SolidWorks
Dim swApp As SldWorks.SldWorks

Sub main()

    ' Récupère l’instance de l’application SolidWorks active
    Set swApp = Application.SldWorks
    
    Dim swModel As SldWorks.ModelDoc2
    
    ' Récupère le document SolidWorks actuellement actif (pièce, assemblage ou mise en plan)
    Set swModel = swApp.ActiveDoc
    
    ' Vérifie qu’un document est bien ouvert
    If Not swModel Is Nothing Then
        
        ' Convertit le document actif en document d’assemblage
        Dim swAssy As SldWorks.AssemblyDoc
        Set swAssy = swModel
        
        ' Accède au gestionnaire de sélection pour récupérer les objets sélectionnés
        Dim swSelMgr As SldWorks.SelectionMgr
        Set swSelMgr = swModel.SelectionManager
        
        Dim i As Integer
        
        ' Parcourt chaque objet actuellement sélectionné dans l’assemblage
        For i = 1 To swSelMgr.GetSelectedObjectCount2(-1)
            
            ' Vérifie si l’objet sélectionné est bien un composant d’assemblage
            If swSelMgr.GetSelectedObjectType3(i, -1) = swSelectType_e.swSelCOMPONENTS Then
                
                ' Déclaration et récupération du composant sélectionné
                Dim swComp As SldWorks.Component2
                Set swComp = swSelMgr.GetSelectedObject6(i, -1)
                
                ' Suspend la gestion de la liste de sélection pour éviter les interférences
                Debug.Print swSelMgr.SuspendSelectionList
                
                ' Ajoute explicitement le composant à la liste de sélection
                swSelMgr.AddSelectionListObject swComp, Nothing
                
                ' Remplace le composant sélectionné par son équivalent dans le dossier de remplacement
                ' La fonction GetReplacementPath crée le chemin du nouveau fichier
                swAssy.ReplaceComponents2 GetReplacementPath(swComp), swComp.ReferencedConfiguration, False, swReplaceComponentsConfiguration_e.swReplaceComponentsConfiguration_MatchName, True
                    
                ' Réactive la gestion de la sélection une fois le remplacement effectué
                swSelMgr.ResumeSelectionList
                
            End If
        Next
        
    Else
        ' Message d’erreur si aucun assemblage n’est ouvert
        MsgBox ("Veuillez ouvrir un document d’assemblage avant d’exécuter la macro")
    End If
    
End Sub

' Fonction utilitaire : génère le chemin complet du fichier de remplacement
Function GetReplacementPath(comp As SldWorks.Component2)
    
    Dim replFilePath As String
    Dim compPath As String
    compPath = comp.GetPathName() ' Récupère le chemin complet du composant d’origine
                
    Dim dir As String
    dir = REPLACEMENT_DIR ' Dossier de remplacement prédéfini
    
    ' Ajoute un "\" à la fin du chemin si nécessaire
    If Right(dir, 1) <> "\" Then
        dir = dir & "\"
    End If
    
    ' Extrait uniquement le nom du fichier (sans le chemin)
    Dim fileName As String
    fileName = Right(compPath, Len(compPath) - InStrRev(compPath, "\"))
    
    ' Si un suffixe est défini, on le rajoute avant l’extension du fichier
    If SUFFIX <> "" Then
        
        Dim ext As String
        ' Suppose que tous les fichiers ont une extension de type .SLDxxx (ex : .SLDPRT, .SLDASM)
        ext = Right(fileName, Len(".SLDXXX"))
        
        ' Insertion du suffixe avant l’extension
        fileName = Left(fileName, Len(fileName) - Len(ext)) & SUFFIX & ext
        
    End If
    
    ' Construit le chemin complet du fichier de remplacement
    replFilePath = dir & fileName
                
    ' Retourne le chemin généré à la fonction appelante
    GetReplacementPath = replFilePath
    
End Function

(Oryginalne makro :)

Podstawowa funkcja:
https://help.solidworks.com/2017/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iassemblydoc~replacecomponents2.html

Po wprowadzeniu kilku minimalnych zmian powinieneś być w stanie dokonać pożądanych zmian.

Dziękuję za opinię, spróbuję!

Miłego weekendu

Gwen.