Macro vermenigvuldiging

Hallo
Ik zou je VBA-vaardigheden nodig hebben.

Ik heb al een macro die een aangepaste eigenschap maakt met de naam WEIGHT en de solidworks-waarde "SW-Mass" gebruikt.

Ik zou graag zien dat er in deze macro een aangepaste eigenschap van het OPPERVLAKTESTUK wordt gemaakt en dat de waarde ervan het resultaat is van het vermenigvuldigen van "SW-Mass" met een specifieke numerieke RATIO.

Maar ik zit een beetje vast met mijn belabberde VBA-niveau... Kan iemand mij alstublieft helpen?

Hallo

Haal gewoon de waarde op, converteer deze naar een getal en vermenigvuldig vervolgens. Converteer het resultaat naar tekst en plaats het in de aangepaste eigenschap

1 like

Hallo
Als de versie recent is dan 21, is het mogelijk om het type "vergelijking" rechtstreeks in de eigenschap "manager" te gebruiken, anders declareert u het in "vergelijkingsbeheer" en maakt u vervolgens een link naar een eigenschap, deze wordt automatisch bijgewerkt

1 like

Heel erg bedankt @Cyril_f en @Lynkoa15, maar met mijn armoedige niveau weet ik helemaal niet hoe ik het moet aanpakken.
Heb je een klein voorbeeld van code zodat ik dit kan aanpassen aan mijn macro? :sweat_smile:

Hallo

In principe zou het er als volgt uitzien:

Dim swApp               As SldWorks.SldWorks
Dim swModel             As SldWorks.ModelDoc2
Dim swModelDocExt       As ModelDocExtension
Dim swCustProp          As CustomPropertyManager
Dim sMasse              As String
Dim sValout             As String
Dim sVal                As String

Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("Défaut") 'Si la propriété est dans l'onglet personnaliser, laisser vide en remplaçant "Défaut" par ""
bRet = swCustProp.Get6("Masse", False, sValout, sMasse, False, False) 'Récupération de la propriété de masse, changer le nom de la propriété en fonction de votre modèle
sVal = CStr(CDec(sMasse) * 3) 'Conversion du texte en valeur décimale, multiplication x 3 et conversion en donné de type texte
bRet = swCustProp.Set2("Ra", sVal) 'Renseignement de la propriété Ra avec la valeur convertie en texte
End Sub


3 likes

Bedankt @Cyril_f , daar ga ik van uit :+1:

@Cyril_f heb ik de regels gekopieerd / geplakt en gewijzigd wat er veranderd moest worden, maar de macro hangt aan de sVal-lijn:


Ik heb in de syntaxis gekeken, maar ik zie niets abnormaals. Ik had een verhouding met decimaal, dus ik heb getest met een verhouding van 2, maar de macro crasht nog steeds.
Heb je een idee van het probleem?
Bedankt

Hallo
Wat is de foutmelding en welke versie van SW gebruikt u?

2 likes

Welkom @Cyril_f
Hier is de foutmelding:
image
En ik ben op Solidworks 2022 Sp05

Ik heb dit probleem niet, de mogelijkheid om mij een testbestand te sturen met de eigenschappen om te controleren?

1 like

Ok, hier is het deel dat ik heb getest, evenals de macro:
HEXA POOL TEST. SLDPRT (567.1 KB)
00-MASSA-OPPERVLAK.swp (36 KB)

Geen probleem van mijn kant, ongeacht de waarde van de coëfficiënt (je moet een punt als komma zetten).
Misschien kunt u de referenties van het macroproject raadplegen:
image
Anders kan er een subtiliteit zijn aan de kant van de landinstelling van het station en het decimaalteken.

2 likes

@Cyril_f
Hier zijn mijn Macro referenties:

En hier zijn mijn regionale parameters^tres:

Probeer de komma te vervangen door een punt.

2 likes

Welkom @Cyril_f
De macro werkt alleen als ik de eigenschap SURFACE PIECE in F8 maak.
Als het veld niet wordt aangemaakt, gebeurt er niets.
Ik ben op zoek geweest naar hoe ik het veld automatisch kan maken, maar ik zit vast.

Dit is wat ik tevergeefs probeerde te sleutelen:

Optie Expliciete

Dim swApp als SldWorks.SldWorks
Dim swModel als SldWorks.ModelDoc2
Dim swModelDocExt als ModelDocExtension
Dim swCustProp als CustomPropertyManager
Zon sMass als snaar
Dim sValout als snaar
Dim sVal als snaar
Dim bRet als snaar

Sub hoofd()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension

Set swCustProp = swModelDocExt.CustomPropertyManager(" PC ") 'Als de eigenschap in het tabblad Aanpassen staat, laat dan dit leeg door ' PC ' te vervangen door '  '

bRet = swCustProp.Get6'  , False, sValout, sMasse, False, False) 'Het ophalen van de massa-eigenschap, het wijzigen van de naam van de eigenschap om bij uw model te passen

sVal = CStr(CDec(sMass) * 2) 'Converteer tekst naar decimale waarde, vermenigvuldig x RATIO en converteer naar tekstgegevens

'bRet = swCustProp.Set2(" SURFACE PIECE ", sVal) 'Vul de eigenschap SURFACE PIECE in met de waarde geconverteerd naar tekst

bRet = swModel.AddCustomInfo3(" PC ", " SURFACE PIECE ", val)

Einde Sub

Ik heb het geprobeerd met deze opdracht, maar ik denk dat er iets mis is:
bRet = swModel.AddCustomInfo3(" PC ", " SURFACE PIECE ", val)

Heeft u een idee om dit alstublieft te corrigeren?

In plaats van:
'bRet = swCustProp.Set2("OPPERVLAKTE STUK", sVal)

Zet iets als:
bRet = swCustPropMgr.Add3(" SURFACE PIECE ", swCustomInfoType_e.swCustomInfoDate, sVal, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)

Set is wanneer de eigenschap al bestaat, lijkt mij.

Zie deze link:
https://help.solidworks.com/2020/English/api/sldworksapi/Add_and_Get_Custom_Properties_Example_VB.htm?verRedirect=1

Of completer:

2 likes

Dat klopt.
Als de eigenschap niet bestaat, moet je hem maken, als hij wel bestaat, gebeurt het ook dat SW niet kan schrijven (het is mij overkomen op oude bestanden) en in dit geval moet je de eigenschap verwijderen en opnieuw maken.

2 likes

Ik antwoord zelf, het is opgelost met Add3 waarmee je kunt overschrijven als de eigenschap al bestaat.
Dus eigenlijk:

swCustProp.Add3("SURFACE PIECE", 30, sVal, 1)
2 likes

Hallo, bedankt voor je antwoorden.
De macro 00-MASS-SURFACE werkt goed. Weet u echter hoe u slechts 3 cijfers achter de komma kunt hebben voor de oppervlaktewaarde?
00-MASS-SURFACE.swp (45.5 KB)

En ik wil deze macro graag integreren in de 00-MACRO HEXA macro hieronder:
00-MACRO HEXA.swp (63,5 KB)

Ik heb het getest, maar ik krijg deze foutmelding wanneer ik de macro start:
image

De debug geeft me dit:

Weet jij hoe je dit kunt corrigeren?

Bedankt

Hallo

Dus voor de fout is het waarschijnlijk de variabele swCustProp.Get6 die leeg is, dus de eigenschap bestaat niet of er is een probleem met de variabeleverklaring.
Om te beperken tot 3 decimalen, moet u de functie "Formatteren" gebruiken:

    sVal = CStr(Format(CDec(sMasse) * 0.0556, "0.000"))

2 likes