Solidworks Macro: Kopieer eigenschappen van het tabblad "Samenvatting" naar "Configuratiespecifiek"

Hoi allemaal

Zoals beschreven in de titel van mijn vraag, zou ik bij het importeren van een bestand in STEP-formaat dat ik krijg van CADENAS (partcommunity) en het hebben van een goed gedefinieerde lijst met eigenschappen (aangezien ik het alleen voor de Bossard-bibliotheek zal gebruiken), graag een macro willen kunnen uitvoeren die enkele eigenschappen zou kopiëren (bijvoorbeeld "BOMINFO" -> "AANDUIDING 1") van het tabblad "Samenvatting" naar het tabblad "Configuratiespecifiek", dat een lijst met eigenschappen bevat uit een standaard bestand met aangepaste eigenschappen in mijn bedrijf.

Ik heb al veel gezocht op het forum zonder een methode te vinden om aan te passen aan mijn use case. Dus zou je me wat advies kunnen geven , of zelfs de macrosyntaxis kunnen geven die ik in dit geval moet gebruiken?

Bij voorbaat dank en wens u een fijne dag.

Vriendelijke groeten
Yann


2022-04-05_10_08_16-proprietes-recapitulatif.png
2022-04-05_10_09_32-proprietes-specifiques-configuration.png

De eigenschappen van een configuratie lezen:

https://help.solidworks.com/2018/English/api/sldworksapi/Get_Custom_Properties_for_Configuration_Example_VB.htm

De documenteigenschap lezen:

https://help.solidworks.com/2016/English/api/sldworksapi/Add_and_Get_Custom_Properties_Example_VB.htm

 

Een voorbeeld van een stukje code dat ik in een van mijn macro's heb gevonden, het eerste deel kijkt of de configuratie-eigenschap leeg is en zo ja, dan leest het de documenteigenschap.

In de hoop dat dit helpt:

 

Dim swCustPropMgr As SldWorks.CustomPropertyManager

'Récupère la catégorie de la configuration active
            Set swCustPropMgr = swPart.Extension.CustomPropertyManager(ActiveConfig) 'get properties
            categorie = swCustPropMgr.Get("Categorie") 'get categorie
            designation = swCustPropMgr.Get("Designation")


            'Si la catégorie de la config active est vide on récupère celle du document
            If categorie = "" Then
                Set swCustPropMgr = swPart.Extension.CustomPropertyManager("") 'get properties
                categorie = swCustPropMgr.Get("Categorie") 'get categorie
                If designation = "" Then
                    designation = swCustPropMgr.Get("Designation") 'get categorie
                End If
            End If
            
            Debug.Print "Catégorie: " & categorie

 

 

Anders is hier een cursus over SW-macro's voor eigenschappen:

https://www.codestack.net/solidworks-api/data-storage/custom-properties/

https://blog.codestack.net/custom-properties-automation

 

Hallo 

Ter informatie, ik ben er al in geslaagd om deze code te schrijven die de eigenschappen creëert die niet bestaan in het tabblad "Samenvatting":

Dim swApp           As SldWorks.SldWorks
Dim swModel         As SldWorks.ModelDoc2
Dim Value           As String

Sub main()

    Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc
    Value = swModel.CustomInfo("DESIGNATION 1")
    
    If Value <> "" Then
        swModel.CustomInfo("DESIGNATION 1") = swModel.CustomInfo("BOMINFO")
    Else
        swModel.AddCustomInfo3 "", "DESIGNATION 1", swCustomInfoText, swModel.CustomInfo("BOMINFO")
    End If

    swModel.ForceRebuild3 (False)
    swModel.Save

End Sub

Hoe bewerk ik het zodat eigenschappen worden gekopieerd/gemaakt in het tabblad "Configuratie specifiek"?

Bij voorbaat dank,
Yann

 

Ik zag net dat je toegang hebt tot de MyCADservice-tools (gratis), Batchproperties of Integration gebruikt, het is misschien gemakkelijker voor je en in het slechtste geval kun je een ticket maken met Visiativ als je het niet kunt.

Of vraag opnieuw om hulp

https://help.visiativ.com/mycadtools/2020/fr/BatchProperties.html

https://help.visiativ.com/mycadtools/2020/fr/Integration.html

 

1 like

Hallo sbadenis,

Bedankt voor je feedback, ik zal de MyCADservice-tools, de links en de voorbeeldmacro die je me hebt gegeven bekijken.
Ik kom snel terug op mijn vraag .

Anders is er op dezelfde site een die alle eigenschappen kopieert Aanpassen aan configuratie specifiek (naar de actieve configuratie)

https://www.codestack.net/solidworks-api/data-storage/custom-properties/copy-file-specific-to-configuration/

Met de toevoeging van een voorwaarde als deze, zou het moeten werken:

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swCustPrpMgr As SldWorks.CustomPropertyManager
Dim swConfCustPrpMgr As SldWorks.CustomPropertyManager
 
Sub main()
 
    Set swApp = Application.SldWorks
 
    Set swModel = swApp.ActiveDoc

    If Not swModel Is Nothing Then
   
        Set swCustPrpMgr = swModel.Extension.CustomPropertyManager("")
       
        Dim vNames As Variant
        Dim vTypes As Variant
        Dim vValues As Variant
        swCustPrpMgr.GetAll vNames, vTypes, vValues
   
        Dim activeConfName As String
        activeConfName = swModel.ConfigurationManager.ActiveConfiguration.Name

        Set swConfCustPrpMgr = swModel.Extension.CustomPropertyManager(activeConfName)
 
        Dim i As Integer
   
        For i = 0 To UBound(vNames)
'remplacer ici "Essai" Par le nom ou les noms de propriété à récupérer
            If vNames(i) = "Essai" or vNames(i) = "Essai2" Then
                swConfCustPrpMgr.Add2 vNames(i), vTypes(i), vValues(i)
                swConfCustPrpMgr.Set vNames(i), vValues(i)
            End If
        Next

    Else

        MsgBox "Please open part or assembly"

    End If
   
End Sub

 

1 like

sbadenis, heel erg bedankt, dankzij je laatste stukje code, heb ik aangepast en het doet precies wat ik zocht:

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swCustPrpMgr As SldWorks.CustomPropertyManager
Dim swConfCustPrpMgr As SldWorks.CustomPropertyManager
 
Sub main()
 
    Set swApp = Application.SldWorks
 
    Set swModel = swApp.ActiveDoc

    If Not swModel Is Nothing Then
   
        Set swCustPrpMgr = swModel.Extension.CustomPropertyManager("")
       
        Dim vNames As Variant
        Dim vTypes As Variant
        Dim vValues As Variant
        swCustPrpMgr.GetAll vNames, vTypes, vValues
   
        Dim activeConfName As String
        activeConfName = swModel.ConfigurationManager.ActiveConfiguration.Name

        Set swConfCustPrpMgr = swModel.Extension.CustomPropertyManager(activeConfName)
         
        Dim i As Integer
   
        For i = 0 To UBound(vNames)
'Remplacer la valeur de chaque "vNames(i)" par le nom de la propriété "Personnaliser" dont vous souhaitez récupérer la valeur.
'Pour chaque "swConfCustPrpMgr.Set" dans chaque fonction "If", remplacer le premier argument par le nom de la propriété de destination "Spécifiques à la configuration".
            If vNames(i) = "BOMINFO" Then
                swConfCustPrpMgr.Set "DESIGNATION 1", vValues(i)
            End If
            If vNames(i) = "BNARTNR" Then
                swConfCustPrpMgr.Set "ARTICLE NUMBER", vValues(i)
            End If
            If vNames(i) = "BNMAT" Then
                swConfCustPrpMgr.Set "MATERIAL", vValues(i)
            End If
            If vNames(i) = "BNSURFACE" Then
                swConfCustPrpMgr.Set "SURFACE TREATMENT", vValues(i)
            End If
            If vNames(i) = "BNNORM1" Then
                swConfCustPrpMgr.Set "SPECIFICATION", vValues(i)
            End If
            
        Next

    Else

        MsgBox "Please open part or assembly"

    End If
   
End Sub

 

1 like