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.png2022-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